2013-03-04 2 views
20

Sto leggendo un po 'di codice. Nel costruttore ha super() ma la classe implementa l'interfaccia che, naturalmente, non ha un costruttore. Quindi quale super() si riferisce a?super() nel costruttore

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(); 
} 
+1

Si sta chiamando al costruttore della superclasse. In questo caso - Oggetto. – user

+3

Si riferisce alla classe Object. –

+0

Suppone che il costruttore java.lang.Object supponga. –

risposta

34

super() riferisce alla estesa class (non un'interfaccia implementata). Che in questo caso è Object

Così sarà chiamare il costruttore in Object (che non fa niente)

+1

In Java tutte le classi derivano da Object, a meno che non siano derivate da un'altra classe. Pertanto, super() si riferisce al costruttore della classe Object. –

+1

In realtà * ALL * Le classi Java derivano da Object. Se estendono un'altra classe significa semplicemente che hanno una gerarchia più ampia. – cowls

+0

hmmm, perché qualcuno dovrebbe fare riferimento al costruttore di Object()? se cancello questa riga con super() non avrà alcun effetto, vero? – Nazerke

1

super chiama il costruttore della classe estesa. Tutte le classi in Java derivano da Object. Inoltre, se l'autore di una classe non crea un costruttore per la classe, viene creato un costruttore predefinito che non fa nulla.

Nel tuo caso, super sta chiamando il costruttore predefinito di Object.

Se desideri ulteriori informazioni su Object, puoi leggere il codice sorgente di Object.javahere.

13

Super fa riferimento alla classe estesa. Di default è la classe Object. Il costruttore in Object non fa nulla. In altre parole è possibile eliminare questa riga poiché non è necessaria.

Si prega di notare anche ciò che Oracle sta dicendo su questo argomento:

Se un costruttore non richiama esplicitamente un costruttore della superclasse, il compilatore Java inserisce automaticamente una chiamata al costruttore senza argomenti della superclasse. Se la super classe non ha un costruttore senza argomenti, si otterrà un errore in fase di compilazione. L'oggetto ha un tale costruttore, quindi se Object è l'unica superclasse, non ci sono problemi.

Fonte: http://docs.oracle.com/javase/tutorial/java/IandI/super.html