0

デザインパターンを使用して抽象クラスで抽象メソッドを定義する方法と、メソッドの一部のメソッドで子クラスでの動作をオーバーライドまたは変更する方法はありますか?この例でpublic abstract class GameCharacterは、attackパターンのようなメソッドを用意します(GameCharacter子クラスで*オーバーライド*されるように、のメソッドの一部と空のままにするメソッドの一部を定義します)。

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

}

}
4

2 に答える 2

2

あなたが望むのは次のようなものだと思います:

public abstract class GameCharacter{

    protected abstract doAttackTwo();

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

    ...
}

doAttackTwo()サブクラスによって実装する必要がありますが、doAttackOne()オーバーライドすることはできません。

于 2012-04-15T12:47:07.640 に答える
0

finalサブクラスでオーバーライドできないため、メソッドを宣言する場合。そしてもちろん、メソッドに定義を与えない場合は、(具体的な) サブクラスでそれを実装する必要があります。

于 2012-04-15T12:45:37.327 に答える