假设我有两个名为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
的模式 相关类,同时保留添加新方法的能力 未破坏“封闭开放原则”的未来并没有 打破实施?
答案 0 :(得分:2)
使用Java 8,有default methods
public interface Animal {
void eat();
void speak();
default void sleep(){}
}
现在,您的Animal
必须覆盖eat
和speak
,但可以选择覆盖sleep
。
使用abstract class
的Pre Java 8是防止必须实现每个interface
方法的常用方法。正如您所指出的,这不适用于多重继承,因此不能用于解决所有情况。
P.S。不要声明interface
方法public
,这是所有interface
成员的默认可见性。
答案 1 :(得分:1)
在Java 8中,接口可以为此目的定义default methods。