为什么要使用继承
继承是怎么是实现的
当子类继承父类之后,是可以通过子类对象访问父类当中的成员的
子类继承父类之后,必须要添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了
要是父类与子类都定义了一个a,是用哪个a(用的是子类自己的a)
不重名的内存布局
重名的内存布局
super 可以认为时子类从父类继承过来的这块内存的标识
super 关键字只代表当前对象内部的那一块父类特征,不包含在子类对象中
不重名时,当子类继承父类以后,通过子类对象是可以访问父类当中的成员变量和成员方法的
不重名时,当子类继承父类以后,如何通过子类对象是可以访问父类当中的成员变量和成员方法的
重名时,如何访问父类的成员变量与成员方法
优先访问子类自己的,如果子类没有,就去找父类,父类有就是父类的,没有就报错了
super 关键字的作用
怎么调用父类的构造方法
this() 与 super() 的位置关系
this 和 super 引用对象只能在非静态方法(实例方法)中使用。
如果子类继承了父类,子类完成构造的时候(执行完子类的构造方法),要先帮助父类进行构造
// 子类的构造方法
public Dog(String name, int age, String breed) {
super(name, age); // 调用父类的构造方法
this.breed = breed;
System.out.println("Dog 构造方法被调用");
}
为什么如果子类继承了父类,子类完成构造的时候(执行完子类的构造方法),要先帮助父类进行构造
调用父类的构造方法放置的位置
当父类的构造方法是不带参数的构造方法且只有这一个的情况下,默认会添加一个super()
上图代码输出为 BaseBase
上述代码编译不通过
快速创建上式构造方法的快捷键
子类的构造方法与父类的构造方法执行的顺序
为什么先执行基类的构造方法
父类的静态代码块、子类的静态代码块、父类的实例代码块、子类实例代码块、父类的构造代码块、子类的构造代码块的执行顺序
以上代码输出为YXYZ
第二次执行的时候,静态的代码块不再被执行
protected 关键字
什么叫不同包中的子类
Derived 类继承自 Base 类,但它不能访问其他 Base 类子类(这里是C类)实例的 protected 成员
什么叫不同包中的非子类
字段指的是什么
Java支持几种继承方式
final 的作用
final修饰变量或字段表示什么
final修饰类表示什么
final修饰类时放的位置
组合是什么
组合怎么使用
什么时候用组合、什么时候用继承