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

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

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

コンストラクターがスーパークラス コンストラクターを明示的に呼び出さない場合、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 に答える