Java:如何在子类构造函数中调用超类构造函数?

时间:2017-10-17 13:34:33

标签: java

我只想试着理解这个问题。让我们说我有超类几何的以下构造函数:

public Geometry(double x, double y)
    {
        this.position = new Point(x,y);
        this.collisionMesh = new ArrayList<Point>();
        this.displayMesh = new ArrayList<Point>();
    }

Geometry具有成员位置,collisionMesh和displayMesh,它们的所有子类都将继承。

现在,我有一个子类,粒子。以下是有效的构造函数:

public Particle(double x, double y)
{
   super(x,y);
   this.collisionMesh.add(this.position);
   ...
}

我想要确定的是:对super(x,y)的调用会自动实例化我的子对象的ArrayLists和Point,因此我不需要这样做。

此外,在更深层次上,假设我能做到这一点,这里真正发生了什么?感觉就像我在构造函数中调用构造函数一样。如果粒子对象尚未构建,那么在调用super时构造的是什么?

1 个答案:

答案 0 :(得分:1)

要生成对象,需要调用超类的构造函数。它必须位于构造函数的第一行。如果你不添加该行,java会自动调用不带参数的超类构造函数(就像有一个不可思议的super())。这可以追溯到Object类本身。这种方式当你有意构造一个对象时(或者如果你不写super(),则不会)调用所有超类的构造函数。

如果超类没有参数构造函数,如果你没有用适当的参数调用超级构造函数,那么你会在子类中得到一个编译错误(因为这不能自动工作)。

创建类型Particle时,首先创建一个Object,然后将该对象扩展为Geometry,然后再扩展为Particle。我希望我能正确解释它;)