2013-03-04 10 views
20

Czytam jakiś kod. W konstruktorze ma super(), ale klasa implementuje interfejs, który oczywiście nie ma konstruktora. Więc do którego super() się odnosi?super() w konstruktorze

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

on dzwoni do konstruktora nadklasy. W tym przypadku - Obiekt. – user

+3

Odnosi się do klasy Object. –

+0

Wywołuje konstruktor java.lang.Object, jak przypuszczam. –

Odpowiedz

34

super() dotyczy rozszerzonej class (nie realizowany Interface). Która w tym przypadku jest Object

Tak będzie wywołać konstruktor w Object (który nic nie robi)

+1

W Javie wszystkie klasy pochodzą z Object, chyba że pochodzą z innej klasy. Dlatego super() odnosi się do konstruktora klasy Object. –

+1

Właściwie * ALL * klasy Java pochodzą z Object. Jeśli rozszerzają kolejną klasę, oznacza to, że mają większą hierarchię. – cowls

+0

hmmm, dlaczego ktoś miałby odnosić się do konstruktora Object()? jeśli usunę ten wiersz z super(), nie będzie to miało żadnego efektu? – Nazerke

1

super wywołuje konstruktor rozszerzonego klasy. Wszystkie klasy w języku Java pochodzą z Object. Dodatkowo, jeśli autor klasy nie tworzy konstruktora dla klasy, tworzony jest domyślny konstruktor, który nic nie robi.

W twoim przypadku super wywołuje domyślny konstruktor Object.

Jeśli chcesz dowiedzieć się więcej o Object, przeczytaj kod źródłowy: Object.javahere.

13

Super odwołuje się do rozszerzonej klasy. Domyślnie jest to klasa Object. Konstruktor w Object nie robi nic. Innymi słowy, możesz usunąć ten wiersz, ponieważ nie jest to konieczne.

Należy również pamiętać, co Oracle mówią o tym temacie:

Jeśli konstruktor nie jawnie wywołać konstruktor nadklasy, kompilator Javy automatycznie wstawia wywołanie konstruktora no-argument nadklasy. Jeśli super klasa nie ma konstruktora bezargumentowego, otrzymasz błąd podczas kompilacji. Obiekt ma taki konstruktor, więc jeśli Object jest jedyną nadklasą, nie ma problemu.

Źródło: http://docs.oracle.com/javase/tutorial/java/IandI/super.html

Powiązane problemy