/**
* 继承的初始化顺序
* */
/*
* 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-07-30 10:49:44 发布
本文详细解析了Java中继承初始化的顺序,包括父类与子类构造函数的调用过程、成员变量初始化时机以及方法覆盖所带来的影响。通过一个具体示例,帮助读者理解对象创建过程中变量与方法是如何被正确绑定和初始化的。
858

被折叠的 条评论
为什么被折叠?



