【发布时间】:2016-10-01 04:55:44
【问题描述】:
我正在使用 Java: The Complete Reference 一书学习 Java。我目前在第 9 章,因此只是介绍了包。在第 187 页,它说 “如果您想允许在当前包之外看到元素,但只能看到直接子类化您的类的类,则声明该元素受保护 ”。我从中了解到的是,一个位于包中的子类,比如说'B',并扩展了一个在另一个包'A'中定义为公共的类,有一个名为“proc”的成员,然后为了制作proc在所有子类中可用,包括在当前包“A”之外定义的子类,我必须将其标记为受保护。现在看看我在包'B'中定义的子类的实现:
package subapp;
import app.*;
public class Test extends App {
public Test() {
App app = new App();
System.out.println(app.proc); // error
}
}
我确信所有包(在两个类文件中)都已正确加载,Test 的“直接”超类及其非参数化构造函数可以公开访问,proc 被标记为受保护,并且 main() 函数那里没有问题。但是在运行 subapp.Test 时出现运行时异常,提示“proc has protected access in /superclass path/。是我把 book 语句弄错了还是语句本身有误?
【问题讨论】:
-
Here 是一个很好的表格,说明了
protected访问修饰符的基础知识。
标签: java package protected access-specifier