构造函数中的 super()

2022-09-01 11:28:08

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

答案 1

super()引用扩展的(不是实现的接口)。在这种情况下是classObject

因此,它将调用构造函数(它不执行任何操作)Object


答案 2

Super 引用扩展类。默认情况下,它是 Object 类。对象中的构造函数不执行任何操作。换句话说,您可以删除此行,因为它不是必需的。

另请注意 Oracle 对本主题的评价:

如果构造函数未显式调用超类构造函数,则 Java 编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,您将收到编译时错误。对象确实有这样的构造函数,所以如果对象是唯一的超类,那就没有问题了。

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