我尝试了一个带有公共类的包,一个带有默认类,然后尝试为受保护和私有类提供另外两个,但是它说"私有类的非法修饰符;只允许使用public,abstract和final".为什么会如此.
简单的答案是JLS表示你不能将顶级类声明为private.
原因是拥有一个只对自己可见的类是没有意义的.任何其他类都无法使用它(除此之外,假设使用反射的脏技巧).所以JLS只是说:"它没有意义,我不允许它."
(现在一个嵌套类可以访问private...但那是因为对最外层封闭类中所有类的private方法private......)
其次,测试每个类的东西是理解它的好方法.
我认为最好阅读并尝试理解教科书/教程.问题在于,如果您尝试通过编写自己的示例来学习,您可以轻松地从中得出错误的结论.
对于这个例子:
package privatez; protected class privatez { }
Run Code Online (Sandbox Code Playgroud)
假设的protected类只能对其子类可见.但是类的子类总是可见的,所以这没有任何意义.(此外,防止子类的方法是声明一个类final,并且可以使用"package private"来限制子类;即没有访问修饰符.)
该protected访问修饰符才有的东西,任何意义上的内部类.在顶级课程中,正常含义protected没有任何意义.
(这是尝试通过示例学习的问题之一.您最终难以理解编译器拒绝示例的原因.不要指望编译器"解释"为什么出错.这不是它的作用.)
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |