我正在阅读一些代码。在构造函数中它有super()但是类实现了接口,当然它没有构造函数。那么它指的是哪个super()?
public class BoundingBox implements IBoundingVolume {
public BoundingBox() {
super();
mTransformedMin = new Number3D();
mTransformedMax = new Number3D();
mTmpMin = new Number3D();
mTmpMax = new Number3D();
mPoints = new Number3D[8];
mTmp = new Number3D[8];
mMin = new Number3D();
mMax = new Number3D();
for(int i=0; i<8; ++i) {
mPoints[i] = new Number3D();
mTmp[i] = new Number3D();
}
}
public interface IBoundingVolume {
public void calculateBounds(Geometry3D geometry);
public void drawBoundingVolume(Camera camera, float[] projMatrix, float[] vMatrix, float[] mMatrix);
public void transform(float[] matrix);
public boolean intersectsWith(IBoundingVolume boundingVolume);
public BaseObject3D getVisual();
}
答案 0 :(得分:39)
super()
指的是扩展的class
(不是已实现的接口)。在这种情况下,Object
因此它将调用Object
中的构造函数(什么都不做)
答案 1 :(得分:17)
Super正在引用扩展类。默认情况下,它是Object类。 Object中的构造函数不执行任何操作。换句话说,您可以删除此行,因为它不是必需的。
请注意Oracle对此主题的评论:
如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题。
来源:http://docs.oracle.com/javase/tutorial/java/IandI/super.html
答案 2 :(得分:1)
super
调用扩展类的构造函数。 Java中的所有类都派生自Object
。此外,如果类的作者没有为该类创建构造函数,则会创建一个不执行任何操作的默认构造函数。
在您的情况下,super
正在调用Object
的默认构造函数。
如果您想了解有关Object
的更多信息,可以阅读Object.java
here的源代码。
答案 3 :(得分:-1)
现在让我告诉您我们在这里使用super()的真正原因,即是否要直接调用超类构造函数。当我们调用构造函数时,可能会在层次结构中调用许多构造函数,因此要消除这种情况,我们可以使用super()。 在测试用例中,您可能会处理 “除了问题陈述中所要求的以外,不要提供任何其他构造函数” 因此,解决方案是在构造函数中使用Super()。