1

我定义了以下类...

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

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

我需要Class1覆盖method1()of Class2,但是我仍然想实现ICommon接口。有什么办法可以做到这一点?

4

4 回答 4

5

你不能在不扩展的情况下覆盖。Class2 必须扩展 Class1,然后您将能够覆盖。

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

    @Override
    public void method1()
    {

    }
}

要知道这种设计意味着每个 Class2 都是 Class1,就像每个 Ant 都是一个 Bug。

于 2012-04-12T13:12:37.980 回答
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 ICommonsinceClass已经这样做了,我只是把它放在那里以表明它确实做到了。

需要明确的是,这不需要任何更改ICommon

于 2012-04-12T13:14:50.890 回答
1

你可以让 Class1 成为一个接口......

class Class2 implements ICommon, Class1 {
    ICommon  wrappedClass;
}

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

或者使 Class1 扩展 Class2(通过这样做,Class1 仍然实现 ICommon,因为 Class2 实现了 ICommon)...

class Class2 implements ICommon {
    ICommon  wrappedClass;
}

class Class1 extends Class2 {
    public void method1() {
    }
}
于 2012-04-12T13:16:09.703 回答