- 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);与初始化顺序无关了