super.
父类
- 使用super可以在构造器或方法中调用父类的属性(
super.属性名
)、构造器(super(形参列表)
)、方法(super.方法名
) - 通常情况下,我们习惯省略super
- 但,父类,与子类存在同名的方法或属性时,如果你要调用父类属性或方法,不可省略super
Super调用构造器.
super(形参列表)
只能放在子类构造中的首行this()
与super()
在构造器中只能存在一个- 在类的多个构造器中,至少有一个构造器使用
super(形参列表)
- 在构造器中如果没有显示定义
this()
或super()
,默认生成一个super()
父类无参构造器 - 如果父类不存在无参构造器,子类的构造器会爆红
public class A {
int a;
public A(int a) {
this.a = a;
}
}
class B extends A{
public B() {//未定义隐式超构造函数 A()。必须显式调用另一个构造函数
}
}
子类对象实例化的全过程.
- 从结果上看
- 子类继承父类以后,就获得了父类中声明的属性或方法
- 创建子类的对象,在堆上,会加载所有父类中声明的属性。
- 从过程上看
- 当我们通过子类的构造器创建子类对象时,一定会直接或间接的调用父类的构造器,进而调用父类的构造器,直到调用到Object父类
- 正是因为加载过所有的父类的结构,所以才可以看到内存中有父类的结构,子类对象才可以考虑进行调用
只是调用父类的构造器,并没有创建父类对象,自始至终,只创建了该类的一个对象