Wie wird ein Konstruktor für eine abstrakte Klasse in Java erstellt?

7

Ich möchte wissen, welchen Zweck ein Konstruktor für eine abstrakte Klasse hat; Da wir abstrakte Klassen nicht instanziieren, warum brauchen wir jemals einen solchen Konstruktor?

    
giri 20.01.2010, 23:14
quelle

8 Antworten

9

es wird Zeiten geben, in denen Sie eine gemeinsame Initialisierung von Instanzvariablen haben, die alle erbenden Klassen einrichten müssen. Sie instantiieren eine abstrakte Klasse, wenn Sie sie erweitern, und diese konkrete Klasse hat einen Konstruktor, der entweder die Parameter an den Konstruktor der abstrakten Klasse liefert.

    
Jarrod Roberson 20.01.2010, 23:16
quelle
5

Sie können immer noch von Konstruktoren von Klassen aufgerufen werden, die von dieser erben, wodurch Code-Refactoring für die Verwendung eines Konstruktors in der abstrakten Klasse nützlich ist.

    
Miguel Ventura 20.01.2010 23:16
quelle
3

Wenn Sie endgültige Felder in einer abstrakten Klasse nicht initialisiert haben, müssen Sie sie in einem Konstruktor initialisieren.

z. B.

%Vor%

kompiliert nicht ohne einen Konstruktor, der x zuweist.

    
harto 20.01.2010 23:18
quelle
3

Wenn Ihre Klasse keinen Konstruktor deklariert, macht javac einen Konstruktor ohne Arg, Do-nothing für Sie. Wenn dann Ihre Unterklasse initialisiert wird, ruft sie den generierten No-Op-Konstruktor auf und das Leben ist gut.

Wenn Ihre Klasse jedoch einen Konstruktor deklariert, erstellt javac KEINEN für Sie. In diesem Fall muss der Konstruktor der Unterklasse den Konstruktor der übergeordneten Klasse explizit aufrufen. Andernfalls können Sie die Mitglieder der Elternklasse nicht initialisieren, wie in der obigen Antwort erwähnt.

    
Kashif Q. 20.01.2010 23:21
quelle
2

Konstruktoren für abstrakte Klassen werden von Unterklassen verwendet (die von Unterklassenkonstruktoren mit super(params) aufgerufen werden).

Sie sollten diese Konstruktoren protected machen, um das zu verdeutlichen.

    
Thilo 21.01.2010 01:05
quelle
2

Sie instantiieren abstrakte Klassen nicht, aber der Konstruktor wird aufgerufen, wenn eine Unterklasse instanziiert wird.

Die Verwendung könnte sein, gemeinsame Attribute zu initialisieren, dh.

%Vor%

Ausgabe

%Vor%     
OscarRyz 21.01.2010 01:17
quelle
1

Deduplizierung von allgemeinem Wissen / Verhalten.

z. ein Auto: Alle Ihre Autos werden aus einem Körper und vier Rädern und einem Motor gebaut. Also machen Sie diesen Teil der Konstruktion im Konstruktor für die abstrakte Auto-Klasse, indem Sie Funktionen wie Body (), Wheel (int x), Engine () aufrufen. Jede einzelne Auto-Klasse wird ihre eigene Implementierung von Body (), Wheel () und Engine () haben - aber alle werden die gleichen Schritte ausführen, um das Auto von ihnen zu bauen, so dass es nicht notwendig ist, diese Schritte in jedem einzelnen zu duplizieren Klassen. In diesem Fall implementieren Sie dieses gängige Verhalten im Vorgänger.

    
Bandi-T 21.01.2010 01:35
quelle
-1

Ich stimme zu, Konstruktoren werden unter der Annahme erstellt, dass es Instanzen geben wird. Wenn Sie viel gemeinsamen Code haben, können Sie einen Konstruktor erstellen, aber es ist viel besser, ihn in eine init() -Methode zu schreiben.

    
fastcodejava 21.01.2010 01:39
quelle