首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改接口的多个类,一个设计问题

修改接口的多个类,一个设计问题
EN

Stack Overflow用户
提问于 2019-06-05 23:49:30
回答 2查看 29关注 0票数 0

假设我有一个名为Parent的接口

代码语言:javascript
复制
interface Parent{

void methodOne();
}

这个接口在10个不同的子类中实现

代码语言:javascript
复制
class Child1 implements Parent{
void methodOne();
}

class Child2 implements Parent{
void methodOne();
}
:
:
class Child10 implements Parent{
void methodOne();
}

如何在不破坏其他10个类的情况下向父接口添加新方法?

代码语言:javascript
复制
interface Parent{

void methodOne();
void methodtwo();
}

我知道在Java8中我们可以添加默认方法,但是在Java8之前有没有其他方法可以做到这一点呢

EN

回答 2

Stack Overflow用户

发布于 2019-06-05 23:55:39

之所以引入默认方法,是因为如果要向接口添加新方法,则所有实现此接口的类都会抛出错误,强制您在这些类中实现新方法,这就是类中断的含义。但是,如果向接口添加任何新方法,如果该方法未声明为默认方法,则该方法必须由实现该接口的所有类实现。正如您已经注意到的,这是在Java 8中引入的,以帮助实现向后兼容性。有关这一点的进一步说明,您可以使用check this article。你也可以check this几乎类似的问题来指导你从给出的答案。但是,对于以前的Java版本,您可以使用Abstract类而不是接口来避免中断类。

票数 2
EN

Stack Overflow用户

发布于 2019-06-05 23:58:44

如果没有默认实现,您就无法向接口添加方法,而不必在每个实现类中实现它。绕过它的方法是让您的类扩展一个抽象类,后者反过来实现接口。你会得到类似这样的东西:

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

public abstract class AbstractChild implements Parent {
    //literally, leave blank
}

public class Child1 extends AbstractChild {
    public void methodOne() {
        //implementation goes here
    }
}

....

现在,如果您想要向接口添加新方法,您可以在AbstractChild中实现它们-所有的ChildX类都不需要修改。

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

https://stackoverflow.com/questions/56463949

复制
相关文章

相似问题

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