# 1 楼答案 在Java8之前,接口没有任何默认实现,因此如果任何类A实现了接口,它必须实现接口的所有方法。之后,如果需要更改应用程序设计,并在现有接口中添加更多方法,那么这将非常麻烦,因为所有子类都必须实现这些新方法。随着接口的老化,实现它的类的数量可能会增长到无法扩展接口的程度 但是在Java8中,接口方法有默认实现。当一个类将实现一个接口时,并不强制为接口的默认方法提供一个实现。因此,现在很容易扩展接口的增长。我们只需给出默认实现,就可以在接口中添加更多方法。并非所有新添加的类都需要实现 例如: public interface InteraceExample { default void log(String logMessage) { System.out.println("I1 logging::"+str); } }
# 2 楼答案 据我所知,添加此功能是为了使修改接口成为可能,而无需重新构建实现接口的所有其他类。我想这在用图书馆馆藏构建程序时尤其合适,因为所有这些都是独立维护的 因此,我可以向接口添加一个新方法,只要它有一个默认值,实现该接口的类仍将像以前一样工作。如果使用默认实现,我将不得不修改并重新编译实现接口的每个类 这个特性并不一定违反接口契约原则,因为实现接口的类仍然满足契约,只要它适用于它们实际实现的方法。您仍然可以阅读接口,并知道实现类必须满足哪些约束 尽管如此,在我看来,这个特性的存在是出于实用的原因,而不是因为有一个合理的软件工程理由来推荐它。我怀疑带有默认值的接口和抽象类之间的差异相当微妙;我想知道在新代码中选择前者而不是后者的原因是什么
# 3 楼答案 默认方法在接口更新过程中非常重要 如果一个接口有一组方法,那么所有想要使用该接口的人都必须实现它们如果需要通过添加新方法扩展接口,则intarface的使用者也必须实现此新方法,并被迫更改其代码 使用默认方法,接口管理员可以为方法定义默认实现;想要实现它的消费者可以自由覆盖它或使用已经提供的实现;同时,另一个不需要新方法的消费者可以直接忽略它
# 1 楼答案
在Java8之前,接口没有任何默认实现,因此如果任何类A实现了接口,它必须实现接口的所有方法。之后,如果需要更改应用程序设计,并在现有接口中添加更多方法,那么这将非常麻烦,因为所有子类都必须实现这些新方法。随着接口的老化,实现它的类的数量可能会增长到无法扩展接口的程度
但是在Java8中,接口方法有默认实现。当一个类将实现一个接口时,并不强制为接口的默认方法提供一个实现。因此,现在很容易扩展接口的增长。我们只需给出默认实现,就可以在接口中添加更多方法。并非所有新添加的类都需要实现
例如:
# 2 楼答案
据我所知,添加此功能是为了使修改接口成为可能,而无需重新构建实现接口的所有其他类。我想这在用图书馆馆藏构建程序时尤其合适,因为所有这些都是独立维护的
因此,我可以向接口添加一个新方法,只要它有一个默认值,实现该接口的类仍将像以前一样工作。如果使用默认实现,我将不得不修改并重新编译实现接口的每个类
这个特性并不一定违反接口契约原则,因为实现接口的类仍然满足契约,只要它适用于它们实际实现的方法。您仍然可以阅读接口,并知道实现类必须满足哪些约束
尽管如此,在我看来,这个特性的存在是出于实用的原因,而不是因为有一个合理的软件工程理由来推荐它。我怀疑带有默认值的接口和抽象类之间的差异相当微妙;我想知道在新代码中选择前者而不是后者的原因是什么
# 3 楼答案
默认方法在接口更新过程中非常重要
如果一个接口有一组方法,那么所有想要使用该接口的人都必须实现它们
如果需要通过添加新方法扩展接口,则intarface的使用者也必须实现此新方法,并被迫更改其代码
使用默认方法,接口管理员可以为方法定义默认实现;想要实现它的消费者可以自由覆盖它或使用已经提供的实现;同时,另一个不需要新方法的消费者可以直接忽略它