/**
* 继承的初始化顺序
* */
/*
* 1.首先执行主函数new D..(),内存加载子类对象,对象中有2个i,一个父类的,一个子类的,都是0,调用子类构造函数
* 2.子类构造函数默认调用父类无参构造函数.父类构造函数中也有super();显示初始化,子类对象中属于父类的i=2;
* 3.输出i;此处的this相当于 Base this=new d..(),子类向上转型,this调用的成员变量仍是父类的,所以输出i=2
* 4.执行display,由于向上转型,方法动态绑定,执行子类重写的方法
* 5.子类重写方法中的this.i中的this相当于 D..() this=new D..(),所以指向自己的i,但是i还没有显示初始化,所以输出0
* 6.构造函数中的super()执行完毕,开始显示初始化,子类的i=22;
* 7.执行i=222,子类的i=222
* */
class Base{
private int i = 2;
Base(){
//super();显示初始化,i=2
System.out.println("base:"+this.i); //
this.display();
}
public void display(){
System.out.println("base display:"+this.i); //
}
}
class Derived extends Base {
public int i = 22;
public Derived(){
super();
//显示初始化,i=22
//构造代码块
i = 222; //
}
public void display(){
System.out.println("derived display:"+i);
}
}
public class JiChengChushihua {
public static void main(String[] args){
new Derived();
}
}
继承的初始化
最新推荐文章于 2024-03-24 02:30:00 发布