Abstrakte Methoden in einem abstrakten Klassenkonstruktor: Designfehler?

8

Ich habe eine abstrakte Klasse Entity . Jede Klasse, die Entity erweitert, benötigt einige Standardeinstellungen und einige anpassbare Einstellungen:

%Vor%

Meine erweiterbare Klasse MyEntity nimmt einen Parameter im Konstruktor, der in customSetup() verwendet wird:

%Vor%

Wie der Kommentar sagt, funktioniert dieser Code nicht.

Ich könnte einfach customSetup() wegwerfen und den ganzen angepassten Code nach super() einfügen, aber diese abstrakte Methode macht deutlicher, was du da einfügen sollst.

Ich fühle mich, als würde ich gegen eine Regel des OOP-Designs verstoßen. Was ist der richtige Weg, um zu tun, was ich will?

    
bigstones 20.10.2011, 17:37
quelle

1 Antwort

9

Dies ist im Allgemeinen eine schlechte Idee, Methoden aufzurufen, die von einem Konstruktor überschrieben werden können. Das Problem ist, dass die Klasse noch nicht vollständig initialisiert ist, und wenn die Methode in einer Unterklasse aufgerufen wird, kann es zu Problemen führen.

Sehen Sie sich diese Frage an: Was mit Overridable-Methodenaufrufen falsch ist in Konstruktoren? , es hat eine gute Erklärung.

    
Malcolm 20.10.2011, 17:40
quelle

Tags und Links