2012-04-12 10 views
1

私は定義された以下のクラスを持っている...ラップされたクラスのメソッドをオーバーライドする方法は?

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

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

私は、しかし、私はまだICommonインタフェースを実装する、Class1Class2method1()を上書きしておく必要があります。これが達成できる方法はありますか?

+0

を拡張させるのClass1を作ることができます本当に意味をなさない「Class2のClass1のメソッド1をオーバーライドする」とはどういう意味ですか?私はあなたの例のコメントに基づいてmethod1がICommonの一部ではないと推測しますが、それはmethod1がClass2に存在しないことを意味します。したがって、それを上書きすることは理にかなっていません。 – Jules

+0

あなたの質問に答えられた場合、またはそれがもはや有効でない場合は、誰もが問題が解決されたことを知るように、最も適切な回答を選択するために「チェック」してください。ありがとう。 – wattostudios

答えて

5

あなたは延長せずに上書きすることはできません。 Class2はClass1を拡張する必要があり、次にオーバーライドすることができます。

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

    @Override 
    public void method1() 
    { 

    } 
} 

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

1
class Class1 extends Class2{ 
    ...method1((){ 
      ...... 
     } 
} 

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

1

あなただけの、意味するか:

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

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

正常に動作する必要があること、ありませんか? がすでにあるので、Classはまだありません。私はそれを明確にするためにそこに置いています。

明確にするために、これは全くICommonを変更する必要はありません。

1

あなたはあなたの質問はインターフェイス...

class Class2 implements ICommon, Class1 { 
    ICommon wrappedClass; 
} 

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

それともClass1のは、クラス2(クラス2はICommonを実装しているため、これを行うことで、Class1のはまだICommonを実装)...

class Class2 implements ICommon { 
    ICommon wrappedClass; 
} 

class Class1 extends Class2 { 
    public void method1() { 
    } 
} 
関連する問題