Николай Семенов Asked:2022-02-24 01:55:36 +0000 UTC2022-02-24 01:55:36 +0000 UTC 2022-02-24 01:55:36 +0000 UTC java中的接口可以有非抽象方法吗? 772 之前对于“什么是接口”这个问题,我回答的是“完全抽象的类”,也就是方法全是抽象的(没有body)的类,但最近开始处理迭代器和突然发现它的两个方法有一个主体: 总的来说,情况不是很清楚 java 1 个回答 Voted Best Answer Stanislav Volodarskiy 2022-02-24T02:11:57Z2022-02-24T02:11:57Z 文档说添加了默认方法,以便接口生产者可以追溯扩展它,而不会强迫消费者重写代码,在所有地方添加他们不需要的实现。 默认方法使您能够向库的接口添加新功能,并确保与为这些接口的旧版本编写的代码的二进制兼容性。 看起来像一个补丁。 比如你,这个库的作者,写了一个接口: public interface I { void f(); } 用户使用了您的界面: public class Usage implements I { public void f() { } } 后来,您使用新功能扩展了界面: public interface I { void f(); void g(); } 用户更新了库,编译时出错: Usage.java:1: error: Usage is not abstract and does not override abstract method g() in I 向后兼容性坏了,这很糟糕:你一个人,有很多用户。 让我们修补漏洞: public interface I { void f(); default void g() { } } 大家都很高兴:你扩展了界面,用户不用再写新代码了。
文档说添加了默认方法,以便接口生产者可以追溯扩展它,而不会强迫消费者重写代码,在所有地方添加他们不需要的实现。
看起来像一个补丁。
比如你,这个库的作者,写了一个接口:
用户使用了您的界面:
后来,您使用新功能扩展了界面:
用户更新了库,编译时出错:
向后兼容性坏了,这很糟糕:你一个人,有很多用户。
让我们修补漏洞:
大家都很高兴:你扩展了界面,用户不用再写新代码了。