30

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

4 回答 4

46

super()指的是扩展的class(不是实现的接口)。在这种情况下是Object

所以它会调用构造函数Object(什么都不做)

于 2013-03-04T17:02:42.477 回答
19

Super 是指扩展类。默认情况下,它是 Object 类。Object 中的构造函数什么都不做。换句话说,您可以删除此行,因为它不是必需的。

另请注意 Oracle 对此主题的看法:

如果构造函数没有显式调用超类构造函数,Java 编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。Object 确实有这样的构造函数,所以如果 Object 是唯一的超类,则没有问题。

来源:http ://docs.oracle.com/javase/tutorial/java/IandI/super.html

于 2014-02-19T12:28:37.870 回答
4

super调用扩展类的构造函数。Java 中的所有类都派生自Object. 此外,如果类的作者没有为该类创建构造函数,则会创建一个不执行任何操作的默认构造函数。

在您的情况下,super正在调用Object.

如果你想了解更多Object,可以阅读Object.java 这里的源代码。

于 2013-03-04T17:09:43.300 回答
-1

现在让我告诉你我们在这里使用 super() 的真正原因是如果我们想直接调用超类构造函数。当我们调用构造函数时,可能会在层次结构中调用许多构造函数,因此我们可以使用 super() 来消除这种情况。在测试用例期间,您可能会处理“除了问题陈述中要求的以外,不要提供任何其他构造函数”,因此,解决方案是在构造函数中使用 Super()。

于 2019-06-09T10:38:15.393 回答