原来解决过这个问题,请看注释
你的稍微有点不一样但是思路是一致的,都是初始化时父类构造函数调用子类的成员方法导致的结果..- class A {
- private Integer x = 1;//步骤4 然后再初始化父类的成员变量
- public A()//步骤3 开始执行父类的构造函数,先开始构造父类
- {
- System.out.println(getX()); //步骤5 问题出在这里 父类的构造函数中调用子类的方法,转而执行子类的方法.
- }
- public Integer getX()
- {
- return x;
- }
- }
- class B extends A {
- private Integer x = 2;
- public Integer getX() //这个跟父类同名啊,
- {
- return x;
- }
- public static void main(String[] args) {
- new B();//步骤1 开始new对象
- //步骤2 执行子类的构造函数 ,这里隐含了子类的构造函数
- //同时子类构造函数隐含了父类的构造函数,所以转而执行父类构造函数
- }
-
- }
复制代码 |