假设我有一个定义为:
public interface TestInterface1 {
public void add();
}由A类、B类和C类实现。
现在,我只需要向C类添加一个减法功能;为此,我创建了一个新的接口TestInterface2,并将其实现到C类:
public interface TestInterface2 {
public void sub();
}C类如下所示:
public class C implements TestInterface1, TestInterface2 {
public void add() {
System.out.println("I am in add");
}
public void sub() {
System.out.println("I am in Sub");
}
}现在的问题是,C的实例已经在数百个地方使用了,如:
TestInterface1 c = new C();只有C类才能得到TestInterface1的add方法。
是否有任何方式或模式来实现C类中的两个接口,以便在任何时候创建C类的对象时,都可以从TestInterface1和TestInterface2获得方法
发布于 2017-03-01 17:56:38
如果您可以更改您的接口,那么让TestInterface1扩展另一个接口,以便使用第一个接口创建的对象可以使用它的父方法。
public interface TestInterface1 extends TestInterface2{
public void add();
}发布于 2017-03-01 17:38:12
在我们讨论这个问题之前,您必须考虑为什么要为此使用接口。接口保证所有实例都使用相同的实现。如果您希望一个特定的类有一个更具体的实现,那么这听起来更像是一个具体类上的方法,而不是一个新的接口。
不管怎样,我们可以讨论你的选择。其中一个更干净,传达出清晰的意图;另一个则让事情变得混乱。
第一种选择--传递更清晰的意图--是避免使用限制性更强的接口,而是对希望使用TestInterface2的每个声明使用C。
这意味着您可以在任何想要使用TestInterface2 c = new C();的地方编写它。是的,您将在所有使用C的地方更改它,但是考虑到您必须有一个专门附加到C实例的方法,这个选项是最清晰的。
如果您只是在C中编写该方法,这将是相同的方法。这两者之间真的没有什么区别,我个人更希望您编写只属于C in C的方法。
第二种选择是使用默认方法,这会使事情变得混乱,同时也需要Java 8。这要求您首先在接口中实现它.
public interface TestInterface {
default void sub() {
System.out.println("I am in sub!");
}
}...but,您可以在以后的类中重写它。这会使事情变得混乱,因为实现TestInterface的任何类都可以访问这个默认方法,这很可能不是您想要的需求。
https://stackoverflow.com/questions/42538198
复制相似问题