Java:为什么我们可以将顶级类定义为私有?

Sat*_*tya 45 java

为什么Java允许顶级类被声明为私有?除了"我们无法访问私人课程"之外,还有其他原因吗?

Max*_*erl 68

好吧,你做不到.作为私有的顶级类将完全没用,因为没有东西可以访问它.

  • @stevebot我猜这叫做"受保护" (20认同)
  • @MuhammadBabar实际上,`Protected`不是类的合法修饰符.为了使一个类只限于它的包",你就不会指定任何修饰符(而不是`Public`) (11认同)
  • 不一定是真的.类上面的访问级别是一个包.该类只能限定为包,拒绝访问其他包. (2认同)

Gui*_*ume 25

Java不允许顶级类是私有的.只有'公共'或'包'.


ste*_*bot 10

我相信一个更好的问题是:

顶级班级私有化意味着什么?

如果您考虑访问级别,则上面的级别是包.实际上,您可以在Java中使用包私有顶级类!摘自Oracle(以前的Sun)Java教程:

如果一个类没有修饰符(默认,也称为包私有),它只在自己的包中可见(包是相关类的命名组 - 您将在后面的课程中了解它们.)

根据我提出的问题的答案,这可能适合您对"顶级私人课程"的定义.


Ste*_*n C 8

理论上,你可以在private顶级类上实例化和调用方法(如果语言允许这样的东西...... 它不是!),但你必须使用反射来做到这一点.明智地(IMO)Sun决定私人顶级课程在语言水平上不是一件好事.

实际上,JVM 可能支持由字节码魔术创建的顶级私有"类".但这不是一件有用的事情.


更新 - 事实上,当前的JVM规范清楚地表明,类的访问标志字的ACC_PRIVATE位是"保留供将来使用",并且Java实现应该将其视为未设置.因此,对于严格实现当前规范的任何JVM,上述推测都没有实际意义.


Ani*_*kur 5

允许私有类,但仅作为内部类或嵌套类.如果您有私有内部类或嵌套类,则访问仅限于该外部类的范围.

如果你有一个私人类作为顶级类,那么你就无法从任何地方访问它.所以拥有顶级私有类是没有意义的.