有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在包装类中重写方法?

我定义了以下类

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

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

我需要使Class1覆盖Class2method1(),但是我仍然希望实现ICommon接口。有没有办法做到这一点


共 (4) 个答案

  1. # 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() {
        }
    }
    
  2. # 2 楼答案

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

    class Class2 extends Class1 // no need for implements anymore, because class1 already implements
    {
    
        @Override
        public void method1()
        {
    
        }
    }
    

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

  3. # 3 楼答案

    你是说,只是:

    class Class2 extends Class1 implements ICommon {
     ....
      ICommon  wrappedClass;
      //delegate interface methods to wrapped class
    
      @Override 
      public void method1 () {...}
    }
    

    那应该很好,不是吗?你甚至不需要implements ICommon,因为Class已经这样做了,我只是把它放在那里,以表明它确实这样做了

    清楚地说,这不需要对ICommon进行任何更改

  4. # 4 楼答案

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

    Class2已经实现了IComm接口,所以Class1间接地实现了它