为了账号安全,请及时绑定邮箱和手机立即绑定

关于abstract class,子类对象实例化的问题,请教大家!

关于abstract class,子类对象实例化的问题,请教大家!

素胚勾勒不出你 2018-07-22 09:08:49
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,所以这个时候我觉得成员变量还没有初始化(这个就是我说的不确定的地方,虽然试验结果证明了我的说法,但没理解原理),


查看完整回答
反对 回复 2018-07-23
  • 1 回答
  • 0 关注
  • 686 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信