3 Stimmen

Java wie man eine Klasse erweitert, während man die Methode des übergeordneten Elements implementiert

Ich habe Klasse A, und Klasse B erbt von Klasse A, und Klasse C erbt von Klasse B,

und alle Klassen haben diese Methode:

public void someMethod();

Wie kann ich diese Methode von Klasse C aufrufen, damit die Methode von Klasse A implementiert wird?

4voto

Bohemian Punkte 386825

Sie können das nicht.

Sie können die Implementierung vom Elternelement aufrufen:

super.someMethod();

Aber das war es auch schon. Wenn B eine Implementierung definiert, wird diese aufgerufen. Wenn nicht, wird A aufgerufen, aber Sie können nicht erzwingen, dass A aufgerufen wird (ohne B zu umgehen).

Der Grund dafür ist, dass C von B erbt, und es liegt an der Implementierung in B, ob die Implementierung in A verwendet wird oder nicht. Es kann einen sehr guten Grund geben, warum die Implementierung in A nicht verwendet werden sollte.

Wenn Sie möchten, dass C die Implementierung von A verwendet, erben Sie direkt von A. Wenn Sie etwas Code von B benötigen, erwägen Sie, an eine Instanz von B zu delegieren.

2voto

Amit Sharma Punkte 5334

Jede Klasse kann nur auf eine Instanz ihres unmittelbaren Elternteils mittels super zugreifen. Du kannst nicht auf den Großelternteil zugreifen.

Das bedeutet, dass du in der Mitgliedsfunktion von C super.someMethod() aufrufen kannst. Dies wird die Implementierung von someMethod() von B aufrufen. Jedoch hat ein gegebenes Objekt keinen Zugriff auf die Instanz seines Großelternteils.

Deshalb kannst du die Implementierung von A.someMethod() nicht von C aus aufrufen.

0voto

clwhisk Punkte 1678

Als Design-Prinzip können Sie someMethod() in Klasse A als final deklarieren, dann haben alle drei Zugriff darauf, können die Implementierung jedoch nicht ändern. Dann können Sie eine zweite Methode haben, die das zweite in B benötigte erledigt.

Oder für eine komplexere Situation könnte eine Refactoring-Idee wie diese auch helfen: http://www.refactoring.com/catalog/formTemplateMethod.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X