class A {
int a = f(); /*
A() {
System.out.println("A-constructor");
}
*/
int f() {
System.out.println("A-f()");
return 1;
}
}class B extends A {
int b = a; /*
B() {
System.out.println("B-constructor");
}
*/
int f() {
//System.out.println("B-f()");
return 2;
}
}public class ManyClass {
public static void main(String[] args) {
B b = new B();
System.out.println(b.b);
}
}为啥这代码结果是2- - 不明白
如果要使构造器的初始化顺序影响输出结果
那你就要在构造器中输出静态变量或初始化块中的语句或变量这问题不涉及构造器的初始化顺序问题
是类之间结构问题 楼上已经回答了 LZ不要学晕了当System.out.println(b.b);时A和B已经随着B的实例化而初始化了
即你把代码中注释去掉后无需System.out.println(b.b);
即可输出
A-constructor
B-constructor
其实仅仅从根据述情况就会发现 System.out.println(b.b);与初始化顺序无关了
然后子类的b=a=1 不是这样吗?
结果输出的还是2 莫非它是先判断出了子类覆盖了f()方法 所以实例化时连父类中的a = f() 也调用的是子类对象的实际类型的f()方法
这里的F是对象的f(),可以理解成this.f(),所以就是B类的f(),我的理解,不对还请高手指出来。。