web-dev-qa-db-ja.com

コンストラクター内の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();
}
25
Nazerke

super()は、拡張されたclass(実装されたインターフェースではない)を指します。この場合、Object

したがって、Objectでコンストラクターを呼び出します(これは何もしません)

40
cowls

スーパーは拡張クラスを参照しています。デフォルトでは、Objectクラスです。 Objectのコンストラクターは何もしません。つまり、この行は必要ないので削除できます。

Oracleがこのトピックについて言っていることにも注意してください。

コンストラクターが明示的にスーパークラスコンストラクターを呼び出さない場合、Javaコンパイラーはスーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。スーパークラスに引数なしコンストラクターがない場合、 Objectにはそのようなコンストラクターがあるため、Objectが唯一のスーパークラスである場合、問題はありません。

ソース: http://docs.Oracle.com/javase/tutorial/Java/IandI/super.html

18
jfmg

superは、拡張クラスのコンストラクターを呼び出します。 Javaから派生したすべてのクラスはObjectから派生します。さらに、クラスの作成者がクラスのコンストラクターを作成しない場合、何もしないデフォルトのコンストラクターが作成されます。

あなたの場合、superObjectのデフォルトコンストラクターを呼び出しています。

Objectの詳細については、Object.Javahere のソースコードを参照してください。

2
Zach Latta