2016-09-02 3 views
1

Ich habe ein Problem mit meiner abstrakten Klasse nicht zu wissen, welche Unterklasse seinen Konstruktor aufruft.Verweisen auf Unterklasse von abstrakten Klasse

abstract class A { 

    Field field; 

    public A() { 
     this.field = Manager.add(Here i would like to add the type of subclass); 
    } 
} 

ich in einer Kette von Konstrukteuren, den Klasse-Typ als Parameter tragen konnte, aber ich frage mich, ob es eine andere Art und Weise ist.
Vielleicht könnte ich den StackTrace verwenden, um herauszufinden, über die Unterklassen und ihren Typ, aber ich denke nicht, dass es so verwendet werden sollte.

Vielen Dank im Voraus für Ihre Antworten :)

+4

Normalerweise sollte die abstrakte Klasse nichts darüber wissen müssen. Typspezifische Logik sollte in der Unterklasse vorkommen. Beachten Sie, dass Sie in der abstrakten Klasse eine abstrakte Methode definieren, sie aus dem Konstruktor aufrufen, aber in den Unterklassen implementieren können. Sie können also irgendwie das Verhalten des Superklassenkonstruktors beeinflussen. –

+0

http://stackoverflow.com/questions/3417879/getting-the-name-of-a-sub-class-from-within-a-super-class –

+2

@JFMeier, der Aufruf einer abstrakten Methode vom Konstruktor wird davon abgeraten Die Methode könnte auf nicht initialisierte Eigenschaften zugreifen. – Codebender

Antwort

4

this.getClass() wil Klasse geben, die instanziiert wurde.

+0

Danke, es hat funktioniert :) –

+0

Ist es möglich, 'this.getClass()' vor dem Aufruf des Konstruktors der Superklasse aufzurufen? –

+0

Nein, weil eine Unterklasse nach ihrer Basis/Superklasse instanziiert wird. –

Verwandte Themen