2017-10-17 227 views
-9

我只是想让我的头在这附近。比方说,我有以下构造函数超几何:Java:如何调用子类构造函数内的超类构造函数?

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

几何形状的成员地位,collisionMesh和displayMesh,所有它的子类将继承。

现在,我有一个孩子类,粒子。在下面的一个有效的构造:

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

我想要确保的是这样的:调用超(X,Y)自动实例化我的子对象的的ArrayList和点,这样我就不需要这样做。

此外,在更深层次上,假设我可以做到这一点,这里究竟发生了什么?这感觉就像我在构造函数中调用构造函数一样。如果Particle对象没有被构造完成,那么在调用super的过程中构造的是什么?

+0

谷歌是你的朋友https://docs.oracle.com/javase/tutorial/java/IandI/super.html – Dinh

+3

你正在做很多不太类似的假设与现实。提示:所有这些都是很好的和广泛的文件记录。 – GhostCat

+2

“构造函数”并不是非常幸运的名字。什么是构建(创建意义上的)对象是'new'关键字。它创建类似于'New SomeClass'之类的对象。构造函数类似于将已经创建的对象初始化为适当状态的方法(因此它就像由'new'运算符根据提供的参数调用的特殊方法)。 – Pshemo

回答

1

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

如果超类没有参数构造函数,如果您没有使用正确的参数调用超级构造函数(因为这不能自动工作),那么在子类中会出现编译错误。

当您创建一个类型粒子时,它首先创建一个对象,然后将该对象扩展到一个几何体,然后扩展到一个粒子。我希望我解释得很好;)