众所周知,Java 9接口也支持private
方法。现在,在接口中,您可以声明private
方法以及default
方法。这两种方法都应该有身体(我可以说它是相似的)。我发现了一些像Java 9: private interface methods, example use-case?这样的问题,没有找到更多的分数。
根据我的理解,我发现了一个不同之处:
接口的 default
方法在子类中可见,因为private
修饰符导致private
方法不可见。
我的问题是,除此之外还有其他区别吗?我们在设计API或结构时必须使用private
方法和default
方法。
答案 0 :(得分:4)
假设您有两个default
方法的界面:a()
和b
()。这两种方法共享一些通用逻辑,您可以将其放在private
方法c()
中。
在Java8中,上述方法c()
必须是公开的,即使它只是接口的内部实现。在接口中引入private
之前,用这种默认方法编写一个干净的接口比较困难。
因此,当您即将投入的实施特定于接口本身而不是实施它的外部世界时,您应标记方法private
而不是default
。< / p>
答案 1 :(得分:3)
对于我来说,从逻辑的角度来看,事情没有改变 - 到目前为止你使用private
方法的时候是什么时候?隐藏什么?不重复代码?同样的事情就在这里 - 当你需要时使用它,特别是当可能存在 common 的代码时,例如对于其他多种方法,或者只是想要隐藏它。