为什么 interface
定义中的所有方法都隐含 public
?为什么它不允许 protected
方法?
原文由 Swaranga Sarma 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么 interface
定义中的所有方法都隐含 public
?为什么它不允许 protected
方法?
原文由 Swaranga Sarma 发布,翻译遵循 CC BY-SA 4.0 许可协议
尽管经常被引用的原因是“接口定义了公共 API”,但我认为这是过于简单化了。 (而且它也“闻起来”有循环逻辑的味道。)
混合使用访问修饰符的接口并不是没有意义的;例如,部分公开,部分限制在与接口相同的包中的其他类。事实上,在某些情况下,这可能非常有用,IMO。
实际上,我认为使接口成员隐式公开的部分 原因 是 _它使 Java 语言更简单_:
隐式公共接口成员对程序员来说更容易处理。您见过多少次看似随机选择方法访问修饰符的代码(类)?许多“普通”程序员很难理解如何最好地管理 Java 抽象边界1 。将 public/protected/package-private 添加到接口中会使它们变得更加困难。
隐式公共接口成员简化了语言规范……因此简化了 Java 编译器编写者和实现反射 API 的人员的任务。
“接口定义公共 API”的思路可以说是简化语言设计决策的结果(或特征)……而不是相反。但实际上,这两条思路可能在 Java 设计者的头脑中并行发展。
无论如何,官方对 JDK-8179193 中 RFE 的回应清楚地表明,Java 设计团队决定2允许接口上的 protected
增加了复杂性,几乎没有真正的好处。感谢@skomisa 找到证据。
RFE 中的证据解决了这个问题。这就是为什么没有添加的官方原因。
1 - 当然,顶级程序员对这些事情没有困难,并且可能欢迎更丰富的访问控制功能。但是,当他们的代码交给别人维护时会发生什么?
2 - 您可能不同意他们的决定或他们陈述的推理,但这没有实际意义。
原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
因为接口应该意味着“你可以从课堂外看到什么”。添加非公共方法没有意义。