关于继承的问题
- 子类和父类方法覆写的原则?
- 初始化一个子类实例,父类和子类内部代码的执行顺序?
- super和this的区别?
- 调用实例方法时命中的是父类还是子类,原则是什么?
- 向上转型向下转型
回答
1. 子类和父类方法覆写(override)的原则?
两同两小一大原则:
* 方法名和参数列表相同
* 子类方法返回类型小于父类返回类型
* 子类方法抛出的异常要小于父类抛出的异常
* 子类方法的访问权限要大于父类
2. 初始化一个子类实例,父类和子类内部代码的执行顺序?
- 创建子类对象时,子类和父类的静态块和构造方法的执行顺序为:父类静态块->子类静态块->父类构造器->子类构造器。深入理解为什么是这个顺序,可以看我这篇文章:从京东面试题看java类和对象的初始化
- 静态变量的声明和赋值,声明会在静态块之前,赋值运算将会合并到静态块中,顺序和源代码中的顺序一致。
https://www.cnblogs.com/zhuxiaopijingjing/p/12326262.html
3. super和this的区别?
(1)this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
用法主要有三种:
- 普通的直接引用,此时this相当于指向当前对象本身
- 形参与成员名重名,使用this区分
public Person(String name, int age) {
this.name = name; //前面是成员变量,后面的name指形参name
this.age = age;
}
- 引用本类的构造函数
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person(String name, int age) {
this(name);
this.age = age;
}
}
(2)、super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
super也有三种用法:
1、 普通的直接引用,可以通过在子类中super.xxx来调用父类的方法;
2、子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
3、引用父类构造函数
注意调用父类中的某一个构造函数时,应该为构造函数中的第一条语句。
4. 调用实例方法时命中的是父类还是子类,原则是什么?
5.向上转型、向下转型