java—通过实现接口,它继承了不需要的方法

r1wp621o  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(384)

我有一个接口a,它定义了3个应该实现的方法,类b必须实现这三个方法。没问题。但是在类c中,我也实现了接口a,所以我必须为所有三个方法编写实现。但我的c班不想 doSomthing3() .
我只是在这里举一个例子,但我真正的应用程序是一个有许多方法的大型应用程序。
假设我有100个子类实现接口a,现在我希望50个类有另一个新方法,我可以把它放在接口a中。但是我必须在所有100个子类中实现它吗?我怎么能避免继承不需要的方法呢。

public interface A {

   public void doSomething1();
   public void doSomething2();
   public void doSomething3();

 }
public class B implements A{
   public void doSomething1(){
      System.out.println("doSomething 1");
   }

   public void doSomething2(){
      System.out.println("doSomething 2");
   }

   public void doSomething3(){
      System.out.println("doSomething 3");
   }

}
public class C implements A{

   public void doSomething1(){
      System.out.println("doSomething 1");
   }

   public void doSomething2(){
      System.out.println("doSomething 2");
   }

   public void doSomething3(){ /*Do nothing in this class */  }

}
vwhgwdsa

vwhgwdsa1#

您可以考虑创建存根实现:

public class SimpleA implements A {

  @Override
  public void doSomething1() {
    throw new UnsupportedOperationException();
  }

  // rest omitted

}

现在,您的类可以扩展simplea并只覆盖所需的方法。

0dxa2lsx

0dxa2lsx2#

您可以创建一个简单的接口实现,它总是触发nosuchmethoderror或任何其他运行时异常。
然后简单地扩展该类并只重写有用的方法。
或者如另一个答案所述,您可以考虑重新设计接口。

mitkmikd

mitkmikd3#

您可以创建两个接口。其中一个包含将在两个类中实现的方法,另一个包含希望用于另一个类的额外方法。然后只需将正确的接口实现到正确的类。

public interface A {

   public void doSomething1();
   public void doSomething2();

 }

public interface B extends A {

   public void doSomething3();

 }

那么

public class ClassB implements B{
   public void doSomething1(){
      System.out.println("doSomething 1");
   }

   public void doSomething2(){
      System.out.println("doSomething 2");
   }

   public void doSomething3(){
      System.out.println("doSomething 3");
   }

}
public class ClassA implements A{

       public void doSomething1(){
          System.out.println("doSomething 1");
       }

       public void doSomething2(){
          System.out.println("doSomething 2");
       }

    }
iyr7buue

iyr7buue4#

这个问题是通过引入所谓的 Adapter :这是一个抽象类,实现继承接口的所有方法。在所需的类中,只能重写所需的方法:

public abstract class AAdapter implements A(){
   public void doSomething1(){
   }

   public void doSomething2(){
   }

   public void doSomething3(){
   }
}

在你们班上:

public class C extends AAdapter(){

   @Override
   public void doSomething1(){
      system.out.println("doSomething 1");
   }

   @Override
   public void doSomething2(){
      system.out.println("doSomething 2");
   }
}

相关问题