public abstract class Demo { public Demo() { this.print(); } public abstract void print();}public class DemoImple extends Demo{ private int x = 10; public DemoImple(int x) { this.x = x; } public void print() { System.out.println("x=" + this.x); }}这个case里面,最后的结果是:x=0给出的解释是:通过子类对象来进行实例化。不清楚的地方:1、 new DemoImple(100); //这里不是传递了数值100吗?为什么会是0呢 ?2、之所以有输出,是不是调用了父类,即抽象类Demo的构造方法?实际调用的子类的print() 方法?中间调用机制或是过程是怎样的?public class CaseDemo09 { public static void main(String[] args) { new DemoImple(100); }}
1 回答
吃鸡游戏
TA贡献1829条经验 获得超7个赞
用java做了下试验,说一下我得到的结论,不过我也不是很确定:
调用子类的构造器的时候,首先会调用父类构造器,所以这个时候x的值还没有变成100;
然后,为什么不是10而是0呢,我在子类构造器中显式调用了super()来调用父类构造器,然后在这个地方断点,发现在调用父类构造器的时候x的值是0,而不是10,所以这个时候我觉得成员变量还没有初始化(这个就是我说的不确定的地方,虽然试验结果证明了我的说法,但没理解原理),
- 1 回答
- 0 关注
- 686 浏览
添加回答
举报
0/150
提交
取消