Hier ist das Szenario - & gt; Stellen Sie sich vor, es gibt 3 Klassen, ich möchte etwas tun wie:
%Vor% Das ist fast wie in Androids Klasse Activity
mit onCreate, onStart, onResume ... usw. Methoden, die optional sind, aber wenn Sie davon Gebrauch machen, zwingt Sie Sie, Super zu nennen. Es kann nicht abstrakt sein, weil ich möchte, dass ein bestimmter Code ausgeführt wird, wenn die Methode aufgerufen wird (was nur in der Methode der Elternklasse der Fall ist). Bonuspunkte, wenn Sie wissen, wie sie es so gemacht haben?
Die Android-Quellen verwenden einen booleschen Wert namens mCalled
, der innerhalb der quasi-abstrakten Methodenimplementierung auf true gesetzt ist. In Ihrem Fall wäre das innerhalb der ursprünglichen updatePosition()
.
Wenn Sie dann updatePosition()
aufrufen möchten, rufen Sie dies auf:
und updatePosition()
würden so aussehen
BEARBEITEN:
Nun, da ich darüber nachdenke, ist der Weg android etwas ringsum. Da alle Aufrufe von updatePosition()
durch performUpdatePosition()
gehen, benötigen Sie keinen Code mehr innerhalb von updatePosition()
, der überschrieben werden kann, sollte aber nicht.
Ein viel besserer Ansatz besteht darin, die erforderlichen Aktionen einfach in performUpdatePosition()
:
Auf diese Weise muss sich der Angerufene nicht darum kümmern, super.updatePosition
aufzurufen. Wenn die Unterklasse diese Funktion nicht überschreibt, passiert nichts Zusätzliches, wenn sie dies tun, wird die Überschreibung das vorherige Verhalten ergänzen.
Wie entwirfst du die Enemy-Klasse, so dass sie eine Methode hat, die das tut? etwas, aber erfordert jedes Kind, es zu überschreiben?
Um dies zu tun, müssen Ihre übergeordneten Klassenmethoden als abstrakte Methode definiert werden, dh nur, dass die untergeordnete Klasse weiß, dass die in der übergeordneten Klasse definierte Methode in der untergeordneten Klasse definiert werden muss.
Wie zwingst du das Kind dazu (wer musste die Methode außer Kraft setzen)? Rufen Sie die Methode des Elterns auf?
Das Überschreiben einer Methode ist abgeschlossen, wenn die Elternklasse eine abstrakte Klasse ist.
Tags und Links java android inheritance methods