A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、代码块是什么,分为哪几类,各自有什么特点?
答:
        代码块是用{}括起来的代码
        分为:静态代码块、局部代码块、构造代码块、同步代码块
        局部代码块:在方法中出现,限定变量的生命周期,及早释放,提高内存的利用率
        构造代码块:在类中方法外出现,多个构造方法中相同的的代码存放到一起,每次调用都执行,并
        在构造方法前执行
        静态代码块:在类中方法外出现,并加上static修饰,用于给类进行初始化,在加载的时候就执行,
        并且只执行一次。一般用于加载驱动。

2、子父类都有静态代码块、构造代码块、构造方法,那么他们六者之间的执行流程是什么?
答:父类静态代码块——子类的静态代码块——父类构造方法块——父类构造方法
        ——子类构造代码块——子类的构造方法
       
3、继承的好处、弊端分别是什么?
答:
        好处:提高了代码的复用性;提高了代码的维护性;使类与类之间产生了联系,是多态的前提
        弊端:类的耦合性增强了,类与类之间的关系太紧密,一边添加属性,另一边也就多了一个,
        有的时候是期望的,有的时候是不期望的

4、Java中继承的特点是什么?
答:
        java只支持单继承,不支持多继承
        java可以实现多层继承

5、Java中继承的注意事项是什么?我们什么时候使用继承?
答:
        子类只能继承父类中非私有的成员(成员变量和成员方法)
        子类不能继承父类中的构造方法,但是可以通过super关键字来访问父类构造方法
        不要为了部分功能而去继承。
        继承体现的关系是“is a”

6、this关键字和super关键字分别代表什么,以及他们各自的作用分别是什么?
答:
        this:代表当前对象的引用
        super:代表当前父类对象的引用
作用:
        调用成员变量:
        this:调用本类中的成员变量也可以调用父类中的成员变量
        super:调用父类的成员变量
        调用成员方法:
          this:调用本类中的成员方法,也可以调用父类中的成员方法
        super:调用父类中的成员方法
        调用构造方法:
        this:调用本类中的构造方法
        super:调用父类中的构造方法

8、继承中构造方法的执行流程是什么?
答:
        子类中所有的构造方法都会默认访问父类中的空参构造方法

9、为什么子类中所有的构造方法默认都会访问父类的空参构造?
   假如父类没有无参构造方法,子类应该怎么办?
答:
        因为子类会继承父类中的数据,可能还会使用父类中的数据,
        所以子类在初始化前一定要先完成父类数据的初始化。
解决方法:
        super解决:采用super()显式调用父类的构造方法
        this解决:通过this调用本类的有参构造,然后在本类的有参构造里又调用了父类的有参构造,相当于
        间接调用了父类的有参构造方法

10、super关键字和this关键字可以在构造方法中共存吗?
答:
   不可以共存,因为super()和this()必须出现在构造方法的第一条语句上,所以只能存在一个
       
11、Overload和Override的区别是什么?方法重载能改变返回值类型吗?
答:
        Ocerload:本类中出现的方法名相同,参数列表不同,与返回值类型无关
        Override:子类中出现了和父类方法声明一模一样的方法,与返回值类型有关,是与父类返回值是一致的
        方法重载能够改变返回值的类型
12、final关键字可以做什么,有什么特点?
答:
        修饰类:类不能被继承
        修饰变量:变量变成了常量,并且只能赋值一次
        修饰方法:方法不能被重写(有时所有方法都很重要,不能被重写,需要用final修饰)

13、final修饰局部变量时,有什么特点?
答:
        基本类型:其值不能改变
        引用类型:其地址值不能改变,对象中的属性是可以改变的

14、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。
        需求一:
                项目经理类
                        属性:姓名 工号 工资 奖金
                        行为:工作work
                程序员类
                        属性:姓名 工号 工资
                        行为:工作work
答:
        package itheima008;

public class EmployeeDemo {
        public static void main(String[] args) {
                Programmer p=new Programmer();
                p.setName("张三");
                p.setId("IT-heima0041");
                p.setSalary(20000);
                System.out.println(p.getName()+"----"+p.getId()+"---"+p.getSalary());
                p.work();
                System.out.println("----------------------");
                ProjectManager pm=new ProjectManager();
                pm.setName("李四");
                pm.setId("IT-heima0014");
                pm.setSalary(50000);
                System.out.println(pm.getName()+"-------"+pm.getId()+"----"+pm.getSalary());
                pm.bound();
               
        }
}
class Employee{
        private String name;
        private String id;
        private double salary;
       
        public Employee(){}
        public Employee(String name,String id,double salary){
                this.name=name;
                this.id=id;
                this.salary=salary;
        }
        public void setName(String name){
                this.name=name;
        }
        public String getName(){
                return name;
        }
        public void setId(String id){
                this.id=id;
        }
        public String getId(){
                return id;
        }
        public void setSalary(double salary){
                this.salary=salary;
        }
        public double getSalary(){
                return salary;
        }
}
class Programmer extends Employee{
        public Programmer(){}
        public Programmer(String name,String id,double salary){
                super(name,id,salary);
        }
        public void work(){
                System.out.println("写程序");
        }
}
class ProjectManager extends Employee{
        public ProjectManager(){}
        public ProjectManager(String name,String id,double salary){
                super(name,id,salary);
        }
        public void bound(){
                System.out.println("发奖金");
        }
}

        需求二:
                已知学生类和老师类如下:
                        属性:姓名,年龄
                        行为:吃饭
                        老师有特有的方法:讲课
                        学生有特有的方法:学习
答:
package itheima008;

public class PersonDemo {
        public static void main(String[] args) {
                Teacher t = new Teacher();
                t.setName("刘国梁");
                t.setAge(50);
                System.out.println(t.getName() + "-----" + t.getAge());
                t.eat();
                t.teach();
                Student s = new Student();
                s.setName("张继科");
                s.setAge(25);
                System.out.println(s.getName() + "-----" + s.getAge());
                s.eat();
                s.study();
                System.out.println("--------------------------");       
        }
}

class Person {
        private String name;
        private int age;

        public Person() {
        }

        public Person(String name, int age) {
                this.name = name;
                this.age = age;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public void eat() {
                System.out.println("吃饭");
        }
}

class Teacher extends Person {
        public Teacher(){}
        public Teacher(String name, int age) {
                super(name, age);
        }

        public void teach() {
                System.out.println("讲课");
        }
}
class Student extends Person {
        public Student(){}
        public Student(String name,int age){
                super(name,age);
        }
        public void study() {
                System.out.println("学习");
        }
}
        需求三:
                已知猫类和狗类:
                        属性:毛的颜色,腿的个数
                        行为:吃饭
                        猫特有行为:抓老鼠catchMouse
                        狗特有行为:看家lookHome
答:
        package itheima008;

public class AnimalDemo2 {

        public static void main(String[] args) {
                Cat1 c = new Cat1();
                c.setColor("黑色");
                c.setLeg(4);
                System.out.println(c.getColor() + "---" + c.getLeg());
                c.eat();
                c.catchMouse();
                System.out.println("_-------------------------");
                Dog1 d = new Dog1();
                d.setColor("白色");
                d.setLeg(4);
                System.out.println(d.getColor() + "--------" + d.getLeg());
                d.eat();
                d.lookHome();
        }

}

class Animal1 {
        private String color;
        private int leg;

        public Animal1(String color, int leg) {
                super();
                this.color = color;
                this.leg = leg;
        }

        public Animal1() {
                super();
        }

        public String getColor() {
                return color;
        }

        public void setColor(String color) {
                this.color = color;
        }

        public int getLeg() {
                return leg;
        }

        public void setLeg(int leg) {
                this.leg = leg;
        }

        public void eat() {
                System.out.println("吃饭");
        }
}

class Cat1 extends Animal1 {

        public Cat1() {
                super();
        }

        public Cat1(String color, int leg) {
                super(color, leg);
        }

        public void eat() {
                System.out.println("猫吃鱼");
        }

        public void catchMouse() {
                System.out.println("猫捉老鼠");
        }

}

class Dog1 extends Animal1{
        public Dog1() {
                super();
        }

        public Dog1(String color, int leg) {
                super(color, leg);
        }

        public void eat() {
                System.out.println("狗吃肉");
        }

        public void lookHome() {
                System.out.println("狗看家");
        }

}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马