9

さて、基本的に次の問題があります。抽象クラスに抽象メソッドを持つ別の抽象クラスを継承させようとしていますが、3番目のクラスが両方から継承するため、どちらにも抽象メソッドを実装したくありませんそのうちの:

public abstract class Command
{
      public abstract object execute();
}

public abstract class Binary : Command
{
     public abstract object execute(); //the issue is here
}

public class Multiply : Binary
{
     public override object execute()
     {
           //do stuff
     }
}

バイナリコマンドを単項コマンドから分離しようとしていますが、どちらにも実行メソッドを実装したくない/実装できません。Binary で抽象メソッドをオーバーライドし (そうする必要があるため)、実装されていない例外をスローすることを考えました。オーバーライドする場合は本体を宣言する必要がありますが、抽象化する場合は継承されたメソッドを「非表示」にします。

何かご意見は?

4

2 に答える 2

17

execute()Command から既に継承されているため、Binary クラスで宣言する必要はありません。抽象メソッドは、他の抽象クラスによって実装される必要はありません。要件は、最終的な具象クラスに渡されます。

public abstract class Command
{
    public abstract object execute();
}

public abstract class Binary : Command
{
    //the execute object is inherited from the command class.
}

public class Multiply : Binary
{
    public override object execute()
    {
        //do stuff
    }
}
于 2012-11-22T18:37:24.843 に答える
3

execute()inの宣言をまったく省略Binaryしてください。も抽象的であるため、その祖先の抽象メソッドを実装するBinary必要はありません。

于 2012-11-22T18:37:13.493 に答える