我正在尝试使用不同访问修饰符的类的包进行项目,以查看具有不同访问修饰符的类的所有特性。我尝试了一个包含公共类的包,其中一个包含一个默认类,然后尝试另外两个包含受保护和私有类,但它表示“类privatez的非法修饰符;只允许public,摘要& final”。这是为什么。其次,测试每个班级的东西是理解它的好方法。我试图给出比以前的帖子更好的问题。我也想学习每个访问修饰符的应用。练习访问修饰符
练习访问修饰符
回答
我想有一个包,一个公共类,一个带有默认类,然后设法让其他受保护和私有类2,但它说:“作为类privatez非法修改;只有公开,抽象&决赛被允许“为他们。这是为什么。
简单的答案是,JLS说你不能声明顶级类为private
。
原因是,只有一个只有自己可见的类是没有意义的。没有任何其他课程能够使用它(除了假设,使用反射技巧)。所以JLS只是说:“没有道理,我不允许。”
(现在嵌套类可以访问private
...那是因为private
意味着private
在最外层的类所有类...)
其次,是测试每个班级的东西都是理解它的好方法。
我认为最好是阅读并尝试理解课本/教程。问题是,如果你试图通过自己的例子来学习,你很容易从中得出错误的结论。
对于这个例子:
package privatez; protected class privatez { }
一个假设protected
类会/可能仅是它的子类可见。但类别总是对其子类可见,所以这没有任何意义。 (另外,为了防止子类的方法是声明一个类final
,你可以使用“包私人”限制的子类,即没有访问修饰符)
的protected
访问修饰符只让任何意义的东西内一类。在顶级课程中,protected
的正常含义没有任何意义。 (这是试图通过例子学习的问题之一,你最终难以理解为什么编译器会拒绝这些例子,不要指望编译器“解释”出错的原因,这不是它的角色)
,但是受保护的类可以在同一个包之外的子类中可见,所以不会让它值得受保护 –
我需要查看您编写/编译的确切代码以回答该问题。和确切的编译错误消息。 –
+1如果存在受保护的类概念,那么该类对于相同包中的子类将是可见的,并且在没有定义任何修饰符的情况下就是这种情况。 – havexz
如果你想学习,你应该阅读一些关于java的书。在这里,我只能给你一个小要点:
类访问修饰符:
公共
类可以包装它的一部分外部访问。
默认
这是当你不指定任何东西。这个类可以在包中使用,它是其中的一部分。
只是为了澄清:
private
改性剂是没有意义的。由于没有人可以访问私有类,所以不能用于扩展或实例创建。
说一下,如果有一个protected
类的概念,那么这个类对于同一个包中的子类是可见的,如果你没有定义任何修饰符的话,这个类是可见的。
其他类属性(这些都没有访问改性剂):
抽象
如果定义,该类的用户不能创建它的实例。而扩展它的类必须实现抽象方法或将其定义为抽象。
最终
如果定义,用户不能扩展此类。
[做法访问修饰符]的- 1. Delphi访问修饰符
- 2. 内部访问修饰符
- 3. 库级访问修饰符
- 4. EventInfo访问修饰符
- 5. 动态访问修饰符
- 6. 类访问修饰符
- 7. 保护访问修饰符
- 8. 通过访问修饰符
- 9. 包访问(protected修饰符)
- 10. Java访问修饰符:无修饰符与“默认”
- 11. 访问修饰符C# - 内部修饰符
- 12. 访问修饰符VS属性
- 13. Java访问修饰符优先
- 14. 成员类访问修饰符
- 15. C++子类访问修饰符?
- 16. 访问Javascript中的修饰符
- 17. 访问修饰符的内部类
- 18. 在java中访问'final'修饰符类
- 19. 什么是访问修饰符
- 20. 名称空间的访问修饰符
- 21. 类和访问修饰符在.NET
- 22. C#访问修饰符与传承
- 23. 函数的SQL Server访问修饰符
- 24. 缺少“框架级”访问修饰符
- 25. python - 嵌套类访问修饰符
- 26. 访问修饰符的正确应用
- 27. 关于java最终访问修饰符
- 28. 爪哇 - 保护的访问修饰符
- 29. 自动重构访问修饰符
- 30. 了解默认访问修饰符
可能重复(http://stackoverflow.com/questions/11165566/practice-access-modifiers) –
@AnthonyPegram我把它做成一个更好的问题,实际上解释了我想知道。这不是重复。 –