Java 练习访问修饰符
我正在尝试创建一个包含具有不同访问修饰符的类包的项目,以查看具有不同访问修饰符的类的所有特性。我试着用一个带有公共类的包,一个带有默认类,然后试着用另外两个用于受保护类和私有类,但它说“privatez类的非法修饰符;只允许public、abstract和final”用于它们。为什么会这样。第二,测试每门课的内容是理解它的好方法吗。我想提出一个比上一篇文章更好的问题。我还想学习每个访问修饰符的应用 我试着用一个带有公共类的包,一个带有默认类,然后试着用另外两个用于受保护类和私有类,但它说“privatez类的非法修饰符;只允许public、abstract和final”用于它们。为什么会这样 简单的答案是JLS说不能将顶级类声明为Java 练习访问修饰符,java,Java,我正在尝试创建一个包含具有不同访问修饰符的类包的项目,以查看具有不同访问修饰符的类的所有特性。我试着用一个带有公共类的包,一个带有默认类,然后试着用另外两个用于受保护类和私有类,但它说“privatez类的非法修饰符;只允许public、abstract和final”用于它们。为什么会这样。第二,测试每门课的内容是理解它的好方法吗。我想提出一个比上一篇文章更好的问题。我还想学习每个访问修饰符的应用 我试着用一个带有公共类的包,一个带有默认类,然后试着用另外两个用于受保护类和私有类,但它说“pri
private
原因是,拥有一个只对自身可见的类是没有意义的。任何其他类都不可能使用它(假设不使用反射的肮脏技巧)。所以JLS只是说:“这没有意义,我不允许。”
(现在嵌套类可以访问private
…但这是因为private
意味着private
访问最外层封闭类中的所有类…)
第二,测试每门课的内容是理解它的好方法吗
我认为最好阅读并努力理解教科书/教程。问题是,如果你试图通过写自己的例子来学习,你很容易从中得出错误的结论
对于此示例:
package privatez; protected class privatez { }
假设的受保护的类将/可能只对其子类可见。但是类对它们的子类总是可见的,所以这没有任何意义。(此外,防止子类的方法是声明一个类final
,您可以使用“包私有”来限制子类;即无访问修饰符。)
protected
access修饰符只对类内的内容有意义。在顶级类中,protected
的正常含义没有任何意义
(这是一个试图通过示例学习的问题。你最终很难理解为什么编译器拒绝示例。不要期望编译器“解释”为什么出错。这不是它的角色。)如果你想学习,你应该读一些关于java的书。在这里,我可以给你一个小要点:
类访问修饰符:
公开
类可以在其所属包的外部访问
默认值
这是当你不指定任何东西的时候。该类可以从包中的访问,它是的一部分
只是澄清一下:
private
修饰符没有意义。因为没有人可以访问私有类,无论是用于扩展还是创建实例
假设有一个受保护的
类概念,那么该类对同一包中的子类是可见的,如果不定义任何修饰符,情况就是这样
其他类属性(这些不是访问修饰符):
摘要
如果已定义,则类的用户无法创建其实例。而扩展它的类必须实现抽象方法或将自己定义为抽象的
决赛
如果已定义,则用户无法扩展此类
但是受保护的类可能对同一个包之外的子类可见,因此不值得允许使用受保护的类吗?我需要查看您编写/编译的确切代码来回答这个问题。以及确切的编译错误消息。+1表示如果存在受保护的类概念,则该类将对同一包中的子类可见,如果不定义任何修饰符,则情况就是如此。包privatez;受保护的类privatez{}它表示“privatez类的非法修饰符;“只允许公开、抽象和最终版本”“@AnthonyPegram的可能副本我把它变成了一个更好的问题,并实际解释了我的疑惑。这不是重复。