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
}
}
Warum * geschützte abstrakte doAttackTwo(); * ist geschützt? –
'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
Geschützt kann auch von allen Klassen im selben Paket zugegriffen werden, auch wenn sie keine Unterklasse von GameCharacter sind. – assylias