构造函数中的super()

时间:2013-03-04 17:01:52

标签: java constructor super

我正在阅读一些代码。在构造函数中它有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();
}

4 个答案:

答案 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()。

相关问题