构造函数中的super()

Naz*_*rke 26 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();
}
Run Code Online (Sandbox Code Playgroud)

cow*_*wls 42

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

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

  • 它是一条冗余线,无论如何都是暗示的.如果删除该行,它仍将调用超类构造函数.这可以确保调用层次结构中的所有构造函数 (4认同)
  • 实际上 *ALL* Java 类都是从 Object 派生的。如果它们扩展了另一个类,则仅意味着它们具有更大的层次结构。 (3认同)
  • 请参阅本页底部的注释:http://docs.oracle.com/javase/tutorial/java/IandI/super.html (2认同)

jfm*_*fmg 18

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

还请注意Oracle对此主题的评论:

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

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