Noe*_*tin 24 java polymorphism access-modifiers
为什么这个有效?
Foo.java
public class Foo {
public Bar getBar() {
return new Bar();
}
private class Bar {}
}
Run Code Online (Sandbox Code Playgroud)
如果Bar是私有的,那么这个类的用户将如何使用此方法?当然可以使用多态,但这不应该是无效的,并且声明应该指出这是返回一个对象吗?
Tim*_*m B 10
我刚刚对此进行了一些研究,但未能找到明确的答案.它似乎很可能只是Java语言设计者的疏忽,因为它实际上并没有造成任何伤害.将public方法放入private类中并没有什么不同.即使没有办法实际访问该public方法,也没有什么能阻止你这样做.
当然,当您尝试执行此操作时,NetBeans会向您发出警告"通过公共API导出非公共类型".我希望大多数其他环境会发出类似的警告.
返回的对象对尝试使用它的人来说完全没用(除非他们使用反射),他们几乎所能做的就是将它存储到Object(或者他们有权访问的任何其他超类)中然后传递它Object.
如果传递Object被用作传递但从未操作的"句柄",则可能希望这样做.在这种情况下,虽然拥有类仍然更有意义,public但是在其中创建所有方法private以防止它们在类外部执行(或定义public返回的接口并使private类实现该类).
所以答案似乎是:
它可能不应该有效,但因为它没有造成任何伤害,它从未被阻止过.
对于类似的主题,这里有一个很好的答案: