10

いくつかのクラスで使用するインターフェースを宣言したい
このクラスには異なるパラメーターを持つメソッドがあります

インターフェース:

public interface Operation {

public int Add();

}

クラスA:

public class CLASSA implement Operation{

     public int Add(int id,String name);

}

クラスB:

public class CLASSB implement Operation{

     public int Add(String name);

}

このインターフェースの要素をどのように実装しますか?

4

8 に答える 8

13

オペランドオブジェクトを作成できます

public interface Operation {

public int Add(Operand o);

}

また

public interface Operation {

 public int Add(Operand... o);

}
于 2013-02-17T13:41:23.853 に答える
8

他の回答に関して言及する価値のあるいくつかのポイント:

私の提案は、Commandパターンのようなものを実装することです。コマンドの実装をその実装から分離することは、まさにその意図です。

于 2016-01-21T01:42:57.537 に答える
1

この場合、同じインターフェースを使用していませんが、いくつかのパラメーターが自動的に挿入される遺伝システムを作成できます。

public class CLASSA{
     public int Add(int id,String name){
         //something
     }
}

public class CLASSB extends CLASSA{
     public int Add(String name){
         super.Add(this.FIXED_ID, name);
         //something
     }
}

public class OPERATION extends CLASSA{
     public int Add(){
         super.Add(this.FIXED_ID, this.FIXED_NAME);
         //something
     }
}
于 2013-02-17T13:51:57.683 に答える
1

2 つの解決策
インターフェイスで 2 つのメソッドを定義します。

public interface Operation {

public int addName(String name);
public int addIdName(int id, String name);

}

または汎用パラメーターを使用する

public interface Operation {

    public int add(HashMap<String,String> keyValueParams);
}

しかし、オペレーションの場合、これは異なる動作をするはずです。

于 2013-02-17T15:12:31.450 に答える
0

これは悪い考えです。オブジェクト指向の設計とインターフェースの背後にある考え方に違反しています。インターフェイスは、実装からメソッド呼び出しを抽象化する方法として使用されることになっています。

私の推奨事項は、インターフェイスで両方のパラメーターを使用してメソッドを使用し、CLASSB で ID 引数を使用しないか、インターフェイスに add メソッドを使用せず、各クラスに異なるバージョンを使用することです。

于 2013-02-17T13:53:39.170 に答える
0

このようにすることはできません。インターフェース Operations があなたのもの (事前定義されていない、または他の誰か) である場合は、その中に抽象メソッドをオーバーロードしてください。これが唯一の方法です。

于 2013-02-17T13:43:43.697 に答える
0

試してみるのが一番:

public interface Operation {
    public int add();
}


public class SimpleOperation implements Operation {

    @Override
    public int add() {
        return 0;
    }

    public int add(int id, String name) {
        return id;
    }

}

使用時:

Operation op = new SimpleOperation();
op.add(); // Valid
op.add(2, "two"); // Invalid

基本的に、そのメソッドをクラスに追加することはできますが、それがインターフェイスに存在しない場合、呼び出すインスタンスがそのインターフェイスのものである場合は呼び出すことができません。

ただし、インスタンスは classSimpleOperationであり、オーバーロードされたメソッドが宣言されているため、これは有効です。

SimpleOperation op = new SimpleOperation();
op.add(); // Valid
op.add(2, "two"); // Also valid

ただし、これによりインターフェイスの有用性が低下します。メソッドをオーバーロードしたい場合は、両方のメソッドが定義された抽象スーパークラスを使用し、サブクラスでそれらをオーバーライドすることを検討してください。または、元のメソッドとオーバーロードされたメソッドの両方をインターフェイスに追加します。

于 2013-02-17T13:45:56.337 に答える