51,411
社区成员
发帖
与我相关
我的任务
分享public class Testa {
public static void main(String[] args) {
new Derived();
System.out.println("****************************");
Derived d = new Derived();
d.display();
}
}
class Base{
public int i = 2;
public Base(){
System.out.println("-----1----i:"+i);
display();
}
public void display(){
System.out.println("-----4----i:"+i);
System.out.println(i);
}
}
class Derived extends Base{
private int i = 22;
public Derived(){
System.out.println("-----2----i:"+i);
i = 222;
}
public void display(){
System.out.println("-----3----i:"+i);
System.out.println(i);
}
}
这样就看出来执行过程了,创建new Derived();时,
结果:
-----1----i:2
-----3----i:0
0
-----2----i:22
会先执行父类的构造方法,public Base();这里调用display();是子类Derived的方法,
因为这个方法时子类中重写了,所以会执行子类的display();然后才会执行子类的构造方法。
至于Derived d = new Derived();是和new Derived();一样的
-----1----i:2
-----3----i:0
0
-----2----i:22
-----3----i:222
222
执行public Derived();之后,i=222,然后执行d.display();
就是子类Derived的display方法