2017-03-29 4 views
0
  1. Warum sollte eine Klasse den Aufruf den Objects-Standardkonstruktor der Klasse Objects aufrufen, wenn die Klasse bereits über einen parametrisierten Konstruktor und einen nichtparametrisierten Konstruktor verfügt?

BeispielAufruf des Konstruktors des Objekts

public abstract class Foo{ 
    private int dim1; 

    public Foo(int dim1) { 
     super(); 
     this.dim1 = dim1; 

    } 
    public Foo() { 

     this.dim1 = 0; 

    } 
} 

2. Warum ist nicht die super() Methode im unparametrized Konstruktor im Beispiel oben genannt?

  1. Was passiert, wenn ich vergessen passieren könnte, oder ich will nicht mit super() den Konstruktor in der Objektklasse nennen?

  2. Ist es wichtig, ob die Klasse, die die super()-Methode aufruft (Unparametrized Object's Klassenkonstruktor) abstrakt ist oder nicht?

Antwort

2

Warum der Anruf Standardkonstruktors der Klasse Objekte die Objekte eine Klasse aufrufen, wenn die Klasse bereits eine parametrisierte Konstruktor und einen unparametrized Konstruktor?

Nur weil Sie es haben, bedeutet es nicht, dass es automatisch aufgerufen wird. Sie müssen es aufrufen, und dort beginnt die Objekt-Instanziierung.

Warum wird im obigen Beispiel nicht die super() -Methode im nichtparametrisierten Konstruktor aufgerufen?

Es ist keine Methode. Es ruft nur den Superklassen-Standardkonstruktor auf. Weißt du, wenn du es nicht nennst, fügt der Java-Compiler automatisch diese Anweisung ein und gibt dir Byte-Code. Sie müssen also super() in untergeordneten Konstruktoren nicht schreiben, außer Sie möchten einen bestimmten Konstruktor aufrufen.

Was könnte passieren, wenn ich den Konstruktor in der Object-Klasse mit super() vergesse oder nicht?

Keine Sorge. Wie oben erwähnt, fügt der Compiler es für Sie ein.

Spielt es eine Rolle, wenn die Klasse, die das super() Methode (Unparametrized Objekt der Klasse Konstruktor) ruft abstrakt ist oder nicht?

Ja, abstrakt oder nicht spielt keine Rolle. Es ruft nur den Superklassenkonstruktor auf.

+0

Vielen Dank, jetzt verstehe ich, worum es geht. – cristianix

1

1) Sie sollten wahrscheinlich nicht. Es ist unnötig. Es ist eine zusätzliche Codezeile, die nichts bewirkt.

2) Weil das explizite Aufrufen von super() völlig unnötig ist, wenn Ihr Objekt eine andere Klasse als Object nicht erweitert (wie alle Klassen). Sie könnten es aus dem ersten Konstruktor entfernen und nichts würde sich ändern. Der Code würde identisch kompilieren.

3) Nichts. Du musst es nicht tun.

4) Dies macht keinen Unterschied.

+0

Ich weiß. Es war ein Beispiel, in dem diese super() -Methode aufgerufen wurde und ich konnte nicht verstehen, warum sie aufgerufen wird. Vielen Dank für Ihre Antwort . – cristianix

Verwandte Themen