私はいくつかのコードを読んでいます。コンストラクターには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();
}
super()
は、拡張されたclass
(実装されたインターフェースではない)を指します。この場合、Object
したがって、Object
でコンストラクターを呼び出します(これは何もしません)
スーパーは拡張クラスを参照しています。デフォルトでは、Objectクラスです。 Objectのコンストラクターは何もしません。つまり、この行は必要ないので削除できます。
Oracleがこのトピックについて言っていることにも注意してください。
コンストラクターが明示的にスーパークラスコンストラクターを呼び出さない場合、Javaコンパイラーはスーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。スーパークラスに引数なしコンストラクターがない場合、 Objectにはそのようなコンストラクターがあるため、Objectが唯一のスーパークラスである場合、問題はありません。
ソース: http://docs.Oracle.com/javase/tutorial/Java/IandI/super.html
super
は、拡張クラスのコンストラクターを呼び出します。 Javaから派生したすべてのクラスはObject
から派生します。さらに、クラスの作成者がクラスのコンストラクターを作成しない場合、何もしないデフォルトのコンストラクターが作成されます。
あなたの場合、super
はObject
のデフォルトコンストラクターを呼び出しています。
Object
の詳細については、Object.Java
here のソースコードを参照してください。