在接口中受到保护
为什么定义中的所有方法都是隐式的?为什么它不允许使用方法?interface
public
protected
因为接口应该意味着“你可以从类外看到什么”。添加非公共方法没有意义。
虽然经常被引用的原因是“接口定义了公共API”,但我认为这是一种过度简化。(它也“闻起来”了循环逻辑。
拥有混合了访问修饰符的接口并非毫无意义;例如,部分公开,部分限制为与接口相同包中的其他类。事实上,在某些情况下,这可能是右派有用的,IMO。
实际上,我认为使接口成员隐式公开背后的部分原因是它使Java语言更简单:
隐式公共接口成员对于程序员来说更容易处理。您见过多少次代码(类)中方法访问修饰符似乎是随机选择的?许多“普通”程序员很难理解如何最好地管理Java抽象边界1。将公共/受保护/包专用添加到接口使它们更加困难。
隐式公共接口成员简化了语言规范...因此,Java编译器编写者以及实现反射API的人的任务。
“接口定义公共API”的思路可以说是简化语言设计决策的结果(或特征)。而不是相反。但实际上,这两条思路可能在Java设计师的脑海中并行发展。
无论如何,JDK-8179193中对RFE的官方回应清楚地表明,Java设计团队决定2允许接口会增加复杂性,而几乎没有实际的好处。为找到证据而@skomisa致敬。protected
RFE中的证据解决了这个问题。这就是没有添加这一点的官方原因。
1 - 当然,顶级程序员在这些事情上没有困难,并且可能会欢迎更丰富的访问控制功能。但是,当他们的代码被移交给其他人进行维护时会发生什么?
2 - 你可能不同意他们的决定或他们陈述的推理,但这是没有意义的。