java - 练习访问修饰符

标签 java

我正在尝试创建一个包含具有不同访问修饰符的类包的项目,以查看具有不同访问修饰符的类的所有特征。我尝试拥有一个带有公共(public)类的包,一个带有默认类,然后尝试拥有另外两个用于 protected 和私有(private)类的包,但它说“私有(private)类的修饰符非法;仅允许公共(public)、抽象和最终”。为什么会这样呢。其次,测试每个类的内容是否是理解它的好方法。我试图提出一个比上一篇文章更好的问题。我还想学习每个访问修饰符的应用。

最佳答案

I tried having a package with a public class, one with a default class and then tried to have 2 other for protected and private classes but it said "Illegal modifier for the class privatez; only public, abstract & final are permitted" for them. Why is this so.

简单的答案是 JLS 规定您不能将顶级类声明为 private

原因是拥有一个只对其自身可见的类是没有意义的。任何其他类都不可能使用它(假设除了使用反射的肮脏技巧)。所以 JLS 只是说:“这没有意义,我也不允许。”

(现在嵌套可以访问private ...但那是因为private意味着private 到最外层封闭类中的所有类...)

And secondly, is testing stuff for each class a good way to understand it.

我认为最好阅读并尝试理解教科书/教程。问题是,如果您尝试通过编写自己的示例来学习,您很容易从中得出错误的结论。

<小时/>

对于这个例子:

package privatez; protected class privatez { }

假设的 protected 类将/可能仅对其子类可见。但是类总是对其子类可见,因此这没有任何意义。 (此外,防止子类化的方法是声明一个类final,并且您可以使用“package private”来限制子类化;即没有访问修饰符。)

protected 访问修饰符仅对类内部的内容有意义。在顶级类中,protected 的正常含义没有任何意义。

(这是尝试通过示例学习的问题之一。您最终会努力理解编译器拒绝示例的原因。不要指望编译器“解释”为什么出现错误。这不是它的作用。 )

关于java - 练习访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165942/

相关文章:

java - Jslider 应该在停止时触发更改事件

java - 适用于任何对象的自定义 JSON 序列化包装器

java - @autowired on Spring 中的方法

java - Play框架2.6 java websockets akka依赖注入(inject)

java - 如何在 JBoss7.1 中使用 Infinispan 查询

java - Android逆向后如何读取混淆后的Java代码

java - 优化基于网格的粒子系统

java - 如何使用自定义启动配置捕获 Eclipse 插件的控制台输出?

java - 格式化字符串的特定部分

java - 如何将 ubuntu 命令提示符的 jar 输出重定向到文本文件