2013-03-04 9 views
20

Ich lese durch einen Code. Im Konstruktor hat es super(), aber die Klasse implementiert die Schnittstelle, die natürlich keinen Konstruktor hat. Also auf welches Super() bezieht es sich?super() im Konstruktor

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

Es wird an den Konstruktor übergeordneten Klasse aufrufen. In diesem Fall - Objekt. – user

+3

Es bezieht sich auf Objektklasse. –

+0

Es ruft java.lang.Object Konstruktor ich nehme an. –

Antwort

34

super() bezieht sich auf die ausgefahrene class (nicht implementierte Schnittstelle). Die in diesem Fall ist Object

So wird es den Konstruktor in Object nennen (was nichts tut)

+1

In Java werden alle Klassen von Object abgeleitet, sofern sie nicht von einer anderen Klasse abgeleitet sind. Daher verweist super() auf den Konstruktor der Object-Klasse. –

+1

Eigentlich * ALL * Java-Klassen sind von Object abgeleitet. Wenn sie eine andere Klasse erweitern, bedeutet das nur, dass sie eine größere Hierarchie haben. – cowls

+0

hmmm, wieso sollte irgendjemand auf den Konstruktor von Object() verweisen? Wenn ich diese Zeile mit super() lösche, hat das keinen Effekt, oder? – Nazerke

1

super ruft den Konstruktor der erweiterten Klasse. Alle Klassen in Java stammen von Object. Wenn der Autor einer Klasse keinen Konstruktor für die Klasse erstellt, wird außerdem ein Standardkonstruktor erstellt, der nichts tut. In Ihrem Fall ruft super den Standardkonstruktor Object auf. Wenn Sie mehr über Object erfahren möchten, können Sie den Quellcode von Object.javahere lesen.

13

Super verweist auf die erweiterte Klasse. Standardmäßig ist dies die Objektklasse. Der Konstruktor in Object tut nichts. Mit anderen Worten, Sie können diese Zeile löschen, da dies nicht notwendig ist.

Bitte beachten Sie auch, was Oracle zu diesem Thema zu sagen hat:

Wenn ein Konstruktor ein Oberklassenkonstruktors ruft nicht explizit, die Java-Compiler automatisch einen Aufruf an den Konstruktor ohne Argumente fügen der Oberklasse. Wenn die Superklasse keinen Konstruktor ohne Argumente hat, erhalten Sie einen Kompilierungsfehler. Object hat einen solchen Konstruktor. Wenn Object also die einzige Superklasse ist, gibt es kein Problem.

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

Verwandte Themen