1

次のクラスが定義されています...

class Class2 implements ICommon {
    ....
    ICommon  wrappedClass;
    //delegate interface methods to wrapped class
}

class Class1 implements ICommon {
    //interface methods
    //specific methods
    public void method1() {
        ......
    }
}

ofをClass1上書きする必要がありますが、それでもインターフェイスを実装したいと考えています。これを達成する方法はありますか?method1()Class2ICommon

4

4 に答える 4

5

拡張せずにオーバーライドすることはできません。Class2はClass1を拡張する必要があります。そうすれば、オーバーライドできるようになります。

class Class2 extends Class1 // no need for implements anymore, because class1 already implements
{

    @Override
    public void method1()
    {

    }
}

この設計は、すべてのAntがバグであるのと同じように、すべてのClass2がClass1であることを意味します。

于 2012-04-12T13:12:37.980 に答える
1

Class1 をインターフェイスにすることができます...

class Class2 implements ICommon, Class1 {
    ICommon  wrappedClass;
}

interface Class1 extends ICommon {
    public void method1();
}

または、Class1 が Class2 を拡張するようにします (これにより、Class2 が ICommon を実装しているため、Class1 は引き続き ICommon を実装します)...

class Class2 implements ICommon {
    ICommon  wrappedClass;
}

class Class1 extends Class2 {
    public void method1() {
    }
}
于 2012-04-12T13:16:09.703 に答える
1
class Class1 extends Class2{
     ...method1((){
          ......
       }
 }

Class2 は既に IComm インターフェイスを実装しているため、Class1 は間接的に実装しています。

于 2012-04-12T13:14:38.283 に答える
1

つまり、単に:

class Class2 extends Class1 implements ICommon {
 ....
  ICommon  wrappedClass;
  //delegate interface methods to wrapped class

  @Override 
  public void method1 () {...}
}

それはうまくいくはずですよね?それはすでに必要なので、implements ICommonそれClassを明確にするためにそこに置いただけです。

明確にするために、これには何の変更も必要ありICommonません。

于 2012-04-12T13:14:50.890 に答える