class A{
public int Avar;
public A(){
System.out.println("AAA");
doSomething();
}
public void doSomething(){
Avar=1111;
System.out.println("A.doSomething()");
}
}public class P21 extends A{
public int Pvar=2222;
public P21(){
System.out.println("BBB");
doSomething();
System.out.println("Avar="+Avar);
}
public void doSomething(){
System.out.println("Pvar="+Pvar);
}
public static void main(String[] args){
new P21();
}
}输出结果为:
AAA
Pvar=0
BBB
Pvar=2222
Avar=0
不懂这个输出顺序
还有为什么Pvar和Avar会等于0
public int Avar;
public A(){
System.out.println("AAA");
doSomething();
}
public void doSomething(){
Avar=1111;
System.out.println("A.doSomething()");
}
}public class P21 extends A{
public int Pvar=2222;
public P21(){
System.out.println("BBB");
doSomething();
System.out.println("Avar="+Avar);
}
public void doSomething(){
System.out.println("Pvar="+Pvar);
}
public static void main(String[] args){
new P21();
}
}输出结果为:
AAA
Pvar=0
BBB
Pvar=2222
Avar=0
不懂这个输出顺序
还有为什么Pvar和Avar会等于0
1。默认的初始化
2。先查找父类,如果有父类则调用父类的构造函数
3。看是否有this
4。显示的初始化
5。自己构造函数的代码。
1。默认初始化 Avar ,Pvar =0
2。有父类,执行父类的构造函数输出 AAA
3。子类覆盖了父类的doSomething方法,所以输出 Pvar=0
4。显示的初始化 Pvar=2222
5。自己的构造函数的代码
BBB
Pvar=2222
Avar=0 子类并没有执行父类的 doSomething方法,因为被覆盖了,所以是 0
在调用doSomething();时因为是public继承并且自己也有同名函数,即调用自身的doSomething();但是进入此时只是在运行父类所以Pvar并未附值!
主要去查看三种继承的概念,即会明白!