首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个并行接口的实现

多个并行接口的实现
EN

Stack Overflow用户
提问于 2017-03-01 17:26:33
回答 2查看 117关注 0票数 0

假设我有一个定义为:

代码语言:javascript
复制
public interface TestInterface1 {
    public void add();
}

由A类、B类和C类实现。

现在,我只需要向C类添加一个减法功能;为此,我创建了一个新的接口TestInterface2,并将其实现到C类:

代码语言:javascript
复制
public interface TestInterface2 {
    public void sub();
}

C类如下所示:

代码语言:javascript
复制
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的实例已经在数百个地方使用了,如:

代码语言:javascript
复制
TestInterface1 c = new C();

只有C类才能得到TestInterface1的add方法。

是否有任何方式或模式来实现C类中的两个接口,以便在任何时候创建C类的对象时,都可以从TestInterface1TestInterface2获得方法

EN

回答 2

Stack Overflow用户

发布于 2017-03-01 17:56:38

如果您可以更改您的接口,那么让TestInterface1扩展另一个接口,以便使用第一个接口创建的对象可以使用它的父方法。

代码语言:javascript
复制
public interface TestInterface1 extends  TestInterface2{
   public void add();
}
票数 1
EN

Stack Overflow用户

发布于 2017-03-01 17:38:12

在我们讨论这个问题之前,您必须考虑为什么要为此使用接口。接口保证所有实例都使用相同的实现。如果您希望一个特定的类有一个更具体的实现,那么这听起来更像是一个具体类上的方法,而不是一个新的接口。

不管怎样,我们可以讨论你的选择。其中一个更干净,传达出清晰的意图;另一个则让事情变得混乱。

第一种选择--传递更清晰的意图--是避免使用限制性更强的接口,而是对希望使用TestInterface2的每个声明使用C

这意味着您可以在任何想要使用TestInterface2 c = new C();的地方编写它。是的,您将在所有使用C的地方更改它,但是考虑到您必须有一个专门附加到C实例的方法,这个选项是最清晰的。

如果您只是在C中编写该方法,这将是相同的方法。这两者之间真的没有什么区别,我个人更希望您编写只属于C in C的方法。

第二种选择是使用默认方法,这会使事情变得混乱,同时也需要Java 8。这要求您首先在接口中实现它.

代码语言:javascript
复制
public interface TestInterface {
    default void sub() {
        System.out.println("I am in sub!");
    }
}

...but,您可以在以后的类中重写它。这会使事情变得混乱,因为实现TestInterface的任何类都可以访问这个默认方法,这很可能不是您想要的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42538198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档