- super 表示父类对象的引用
public class Person{
// 父类的构造方法无法被继承 无法被重写
public Person(){}
public void eat(){
System.out.println("person eat");
}
}
public class Man extends Person{
public Man(){
super();
}
@override
public void eat(){
// 表示先调用父类的eat()方法
super.eat();
System.out.println("man eat");
}
}
子类实例化过程解析
- new Man()
- ClassLoader加载类的信息
- 进入父类Person类
- 加载父类的静态成员(顺序和书写位置有关)
- 进入子类Man类
- 加载子类的静态成员
- 调用子类构造方法(并不会执行构造方法)
- 往上寻找父类的构造方法直到最顶级的父类为止 但并不会执行构造方法
- 实例化父类属性的赋值操作
- 执行父类的构造代码块
- 执行父类的构造方法
- 实例化子类的属性
- 执行子类的构造代码块
- 执行子类的构造方法
总结
子类实例化 -》( 父类静态成员 -> 子类静态成员 -> 父类对象构造 -> 子类对象构造)
子类实例化过程构造方法调用流程
- 子类构造过程中必须调用父类的构造方法
- 子类实例化在没有显式调用父类的构造方法前提下 无论调用哪个构造方法 都会进入到父类的无参构造方法
- 构造方法的调用必须放在构造方法里
- super()/this() 调用构造方法必须放在第一行