构造器的初始化顺序问题(这代码为什么这样)
Java code
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- - 不明白。。。
------解决方案--------------------实例化子类对象时会预先创建一个父类对象,而这里的子类重写了父类对象的f()方法,
我想楼主主要是后面这里没有搞懂吧。你要注意父类的方法已经被重写了。
------解决方案--------------------如果要使构造器的初始化顺序影响输出结果
那你就要在构造器中输出静态变量或初始化块中的语句或变量
这问题不涉及构造器的初始化顺序问题
是类之间结构问题 楼上已经回答了 LZ不要学晕了
当System.out.println(b.b);时A和B已经随着B的实例化而初始化了
即你把代码中注释去掉后无需System.out.println(b.b);
即可输出
A-constructor
B-constructor
其实仅仅从根据述情况就会发现 System.out.println(b.b);与初始化顺序无关了