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

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);

    }


}


素胚勾勒不出你
浏览 687回答 1
1回答

吃鸡游戏

用java做了下试验,说一下我得到的结论,不过我也不是很确定:调用子类的构造器的时候,首先会调用父类构造器,所以这个时候x的值还没有变成100;然后,为什么不是10而是0呢,我在子类构造器中显式调用了super()来调用父类构造器,然后在这个地方断点,发现在调用父类构造器的时候x的值是0,而不是10,所以这个时候我觉得成员变量还没有初始化(这个就是我说的不确定的地方,虽然试验结果证明了我的说法,但没理解原理),
打开App,查看更多内容
随时随地看视频慕课网APP