web-dev-qa-db-fra.com

super () dans le constructeur

Je lis un code. Dans le constructeur, il a super () mais la classe implémente une interface qui n'a bien sûr pas de constructeur. À quel super () fait-il référence?

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() fait référence à class étendu (pas une interface implémentée). Qui dans ce cas est Object

Il appellera donc le constructeur dans Object (ce qui ne fait rien)

40
cowls

Super fait référence à la classe étendue. Par défaut, c'est la classe Object. Le constructeur dans Object ne fait rien. En d'autres termes, vous pouvez supprimer cette ligne car elle n'est pas nécessaire.

Veuillez également noter ce que dit Oracle à ce sujet:

Si un constructeur n'appelle pas explicitement un constructeur de superclasse, le compilateur Java insère automatiquement un appel au constructeur sans argument de la superclasse. Si la superclasse n'a pas de constructeur sans argument, vous obtiendrez une erreur au moment de la compilation. Object a un tel constructeur, donc si Object est la seule superclasse, il n'y a pas de problème.

Source: http://docs.Oracle.com/javase/tutorial/Java/IandI/super.html

18
jfmg

super appelle le constructeur de la classe étendue. Toutes les classes de Java dérivent de Object. De plus, si l'auteur d'une classe ne crée pas de constructeur pour la classe, un constructeur par défaut est créé qui ne fait rien.

Dans votre cas, super appelle le constructeur par défaut de Object.

Si vous souhaitez en savoir plus sur Object, vous pouvez lire le code source de Object.Javaici .

2
Zach Latta