我有一个接口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 */ }
}
4条答案
按热度按时间vwhgwdsa1#
您可以考虑创建存根实现:
现在,您的类可以扩展simplea并只覆盖所需的方法。
0dxa2lsx2#
您可以创建一个简单的接口实现,它总是触发nosuchmethoderror或任何其他运行时异常。
然后简单地扩展该类并只重写有用的方法。
或者如另一个答案所述,您可以考虑重新设计接口。
mitkmikd3#
您可以创建两个接口。其中一个包含将在两个类中实现的方法,另一个包含希望用于另一个类的额外方法。然后只需将正确的接口实现到正确的类。
那么
iyr7buue4#
这个问题是通过引入所谓的
Adapter
:这是一个抽象类,实现继承接口的所有方法。在所需的类中,只能重写所需的方法:在你们班上: