向类添加方法而不破坏实现

时间:2014-06-15 10:21:12

标签: java design-patterns design-principles

假设我有两个名为class Cow ad class Pig的课程。

他们都实现了interface Animal

对于interface,只有两种方法称为public void eat()public void speak()

一切都很好。虽然这似乎很好地利用了interface s,但我认为如果我需要向这个interface添加方法,实现就会中断,即我需要实现新的方法在这些课程中,这打破了“开放原则”。

所以我想到,除interface之外,我还会使用abstract类,如果需要我将来需要添加新方法。< / p>

所以,例如,public class Cow extends ... implements Animal

这听起来像个好计划(如果不是,请纠正我)。

但问题是,如果这些类extend已经有其他类了怎么办?在这种情况下,我无法扩展2个类。

所以我的问题是:

  

是否存在我可以声明公共interface的模式   相关类,同时保留添加新方法的能力   未破坏“封闭开放原则”的未来并没有   打破实施?

2 个答案:

答案 0 :(得分:2)

使用Java 8,有default methods

public interface Animal {

    void eat();
    void speak();
    default void sleep(){}

}

现在,您的Animal必须覆盖eatspeak,但可以选择覆盖sleep

使用abstract class的Pre Java 8是防止必须实现每个interface方法的常用方法。正如您所指出的,这不适用于多重继承,因此不能用于解决所有情况。

P.S。不要声明interface方法public,这是所有interface成员的默认可见性。

答案 1 :(得分:1)

在Java 8中,接口可以为此目的定义default methods