当前位置: 代码迷 >> J2SE >> 构造器的初始化顺序有关问题(这代码为什么这样)
  详细解决方案

构造器的初始化顺序有关问题(这代码为什么这样)

热度:46   发布时间:2016-04-24 02:09:14.0
构造器的初始化顺序问题(这代码为什么这样)
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);与初始化顺序无关了

  相关解决方案