2012-04-15 13 views
0

Wie abstrakte Methoden in abstrakten Klasse mit Entwurfsmustern zu definieren, während einige Methoden der Methoden möglich wären override oder ändern Sie ihr Verhalten in untergeordneten Klassen? In diesem Beispiel haben public abstract class GameCharacter Methode attack, die Muster sein sollte (definieren Sie einige der Methoden in GameCharacter und einige lassen leer, * in untergeordneten Klassen * überschrieben werden).Definieren Sie abstrakte Klasse mit abstrakten Methoden in Musterdesignstil

public abstract class GameCharacter{ 

public void attack(GameCharacter opponent){ 

while(opponent.hitPoints > 0 && this.hitPoints > 0){ 

// some abstract method which behavior can be *redefined* 
//if specific class is *overrides* 
// some of this functions 
// it should be pattern design 

public void doDamageToOpponent{ 

doAttackOne(){ .... }; // cannot change 
doAttackTwo(); // can change, be overridden in child class 

} 

public void doDamageToThis{ // counterattack 

doAttackOne(){ .... }; // cannot change 
doAttackTwo(); // can change, be overriden in child class 

} 

} 

Antwort

2

denke ich, was Sie wollen, ist so etwas wie dieses:

public abstract class GameCharacter{ 

    protected abstract doAttackTwo(); 

    protected final doAttackOne() { ... implement here ... } 

    ... 
} 

doAttackTwo() müssen von den Unterklassen implementiert werden, während doAttackOne() nicht außer Kraft gesetzt werden kann.

+0

Warum * geschützte abstrakte doAttackTwo(); * ist geschützt? –

+1

'protected' bedeutet, dass nur diese Klasse' GameCharacter' und alle ihre Unterklassen auf die Methode zugreifen können, so dass sie vor Zugriffen von anderen Punkten in Ihrem Code "geschützt" ist. Wenn Sie das nicht möchten, können Sie sie als "öffentlich" deklarieren; In diesem Fall können Sie beide Methoden von jedem Punkt in Ihrem Code aufrufen. Im Allgemeinen kann es sinnvoll sein, nur Mitgliedern den Zugriff zu erlauben, wenn sie wirklich benötigt werden, also habe ich 'protected' anstelle von' public' verwendet. – Anthales

+0

Geschützt kann auch von allen Klassen im selben Paket zugegriffen werden, auch wenn sie keine Unterklasse von GameCharacter sind. – assylias

0

Wenn Sie eine Methode als final erklären es kann nicht in einer Unterklasse überschrieben werden. Und natürlich, wenn Sie einer Methode keine Definition geben, muss eine (konkrete) Unterklasse sie implementieren.

Verwandte Themen