62,628
社区成员
发帖
与我相关
我的任务
分享








[/quote]
在初始化B()的时候,先调用A的构造器,在因为B重写了printA()方法,所以在A构造器执行的时候调用了B的printA()方法,而此时B还没有被完全初始化,所以B里面a 变量还是0,第一行就打印出0来。当B构造器执行完毕以后,a被赋值6,所以第二行是6[/quote]
看懂了点 就是说实例化B的时候 先调用父类构造器 父类构造器调用重写的方法 调用父类构造器时不会初始化已类的属性 只有调用完父类构造器 调用自己的构造器的时候才会初始化属性 对吧[/quote]
调用父类构造器时 调用的是重写的方法 是不是可以理解为就近调用呢 我还以为调用父类构造器时会初始化父类的属性[/quote]
调用父类构造器时确实会初始化父类的属性,只是这里调用的不是父类方法[/quote]
懂了 谢谢 我代码少写了你也看出来了

[/quote]
对头class A {
int a = 3;
public A() {
printA();
}
public void printA() {
System.out.println("a:"+a);
}
}
class B extends A {
int a = 6;
public B() {
printA();
}
public void printA() {
System.out.println("b:"+a);
}
public static void main(String[] args) {
A a = new B();
}
}