Java 8 接口疑惑

问题描述 投票:0回答:3

仍然不明白为什么Java允许在接口中默认实现,这是否违反了契约应该保持契约的设计原则?有什么例子可以解释一下吗?

java interface
3个回答
1
投票

据我了解,添加此功能是为了可以修改接口,而无需重建实现该接口的所有其他类。我想这在从库集合中构建程序时特别合适,所有库都是独立维护的。

所以我可以向接口添加一个新方法,只要它有默认值,实现该接口的类仍然会像以前一样工作。使用默认实现,我将不得不修改并重新编译实现该接口的每个类。

此功能不一定违反接口即契约原则,因为实现接口的类仍然满足契约,只要它适用于它们实际实现的方法。您仍然可以阅读接口,并了解实现类必须满足哪些约束。

尽管如此,在我看来,此功能的存在确实是出于务实的原因,而不是因为有充分的软件工程理由推荐它。我怀疑具有默认值的接口和抽象类之间的差异非常微妙;我想知道在 new 代码中选择前者而不是后者的原因是什么?


1
投票

默认方法在接口更新过程中非常重要
如果一个接口有一组方法,那么每个想要使用该接口的人都必须实现
如果需要扩展接口以添加新方法,则接口的使用者也必须实现这个新方法,并且他们被迫更改他们的代码。
使用默认方法,接口的管理者可以为方法定义“默认实现”;想要实现它的消费者可以自由地覆盖它或使用已经提供的实现;同时,另一个不需要新方法的消费者可以简单地忽略它。


0
投票

但是在

Java 8

接口方法有默认实现。当类 A 将实现接口时,并不强制提供接口默认方法的实现。所以现在很容易扩展一个接口的增长。我们可以通过提供默认实现来在接口中添加更多方法。所有类都不需要实现新添加的方法。 例如:

public interface InteraceExample { default void log(String logMessage) { System.out.println("I1 logging::"+str); } }

© www.soinside.com 2019 - 2024. All rights reserved.