【问题标题】:Java multiple interfaces implementationJava多接口实现
【发布时间】:2018-10-15 16:32:53
【问题描述】:

设置是这样的。
我有多个接口(即 A、B、C)并且我有实现它们的类(Z 和 Y)
X 实现 A、B{}Y 实现 A、C {}Z 实现 B、C{}

接口 A,B,C 中的某些函数具有相同的定义,我不想在每个类中重新键入它们,我该怎么办?
我用谷歌搜索了它,并注意到一种解决方案是在界面中使用方便的关键字 default。但是如果我被禁止使用这个关键字,比如代码兼容Java8之前的版本怎么办?

有没有更好的方法来处理这个问题?

【问题讨论】:

  • 你能更清楚地描述问题吗?如果ABC都共享一个签名相同的方法f,而W实现了这三个接口,你仍然只需要编写一次实现。
  • 您应该考虑使用 java 8 甚至 11,因为 Oracle 不支持旧版本并且大多数人已经迁移到 java 8 或 11。
  • 让A有函数:a1,a2,a3 B有b1,b2,b3 C有c1,c2,c3 a1, b1和c1定义相同,否则定义不同

标签: java interface abstract-class


【解决方案1】:

那么你应该使用抽象类,并为不同接口中的常用方法提供一些默认实现,如下所示。

interface A {
    void m1();
    void common();
}

interface B {
    void m2();
    void common();
}

abstract class ABClass implements A, B {

    public void common() {
    System.out.println("Default");
}

Class X extends ABClass {
}

【讨论】:

    【解决方案2】:

    您可以favor composition 并采用一个实现您想要重用的方法的类作为参数,而不是通过继承获得这些方法并且必须扩展多个类来获取您的定义。将其保留为私有最终成员变量,您可以以通用方式调用此常用方法。

    【讨论】:

    • 这不会降低代码的可理解性吗?我还在学习OOP,你能给我一个简单的例子吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 2017-10-21
    • 2012-04-28
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多