【发布时间】:2016-03-08 23:31:35
【问题描述】:
我读了一本面向 OOP 的书,并且 关于“受保护”访问修饰符的示例对我来说很奇怪。
示例摘要
- 此示例用于测试“受保护”保留字对变量的影响。
-
ClassA 有 2 个受保护的变量(静态/非静态)
package a; public Class A { protected int a; protected static int b; }
- ClassB 派生自 ClassA 并位于另一个包中
-
ClassB.test 有一个检查可访问性的方法(无法运行)
package b; public Class B extends ClassA { ClassA x = new ClassA(); // [O] : Executable // [X] : Not-executable void test() { a = 1; // [O] : Derived from ClassA b = 1; // [O] : Derived from ClassA // [X] : a is protected, so only accessible within codes in derived class x.a = 1; // A) // [O] : I don't know why it is executable x.b = 1; // B) } }
实际上,b 是“受保护的”,所以我认为它不能被 x.a = 1; 之类的实例变量访问
但它可以通过 'static' 关键字访问。
我怎么理解这个?
总之 A) 很好,但为什么 B) 可执行?
【问题讨论】:
-
我没看懂你的帖子,请更清楚一点
-
参考这个link
-
您能否更新您的示例代码以准确地向我们展示编译器错误的位置?
-
@TimBiegeleisen 为方便起见抱歉。我将编译器错误标记为 [X] - Not-executable.