Android - So erzwingen Sie child, um die übergeordnete Methode mit Code zu überschreiben

9

Hier ist das Szenario - & gt; Stellen Sie sich vor, es gibt 3 Klassen, ich möchte etwas tun wie:

%Vor%
  • Wie entwirfst du die Enemy-Klasse so, dass sie eine Methode hat, die etwas tut, aber jedes Kind dazu auffordert, sie zu überschreiben?
  • Wie erzwingen Sie, dass das Kind (das die Methode überschreiben musste) auch die Methode des Elternteils aufruft?

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?

    
David T. 23.01.2013, 08:32
quelle

4 Antworten

5

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:

%Vor%

und updatePosition() würden so aussehen

%Vor%

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() :

zu verschieben %Vor%

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.

    
Alex Gittemeier 23.01.2013, 08:41
quelle
4

Vielleicht könnten Sie statt der Child-Methode eine Basismethode in der Klasse

definieren %Vor%

Auf diese Weise muss das Kind, wenn Sie updatePosition () aufrufen, seine eigene onUpdatePosition () haben, und Sie wissen, dass das, was der Elternteil tut, immer passiert

    
Gusk 11.04.2014 14:13
quelle
-1
  

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.

    
Zoombie 23.01.2013 08:41
quelle
-3

Wie wäre es mit

? %Vor%     
meeeee 23.01.2013 08:38
quelle

Tags und Links