示例摘要
ClassA有2个受保护的变量(静态/非静态)
package a;
public Class A {
protected int a;
protected static int b;
}
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)可执行?
答案 0 :(得分:3)
formattedWorkStations
关键字表示变量属于类本身而不是所述类的对象。您可以将static
的来电替换为x.b
。由于ClassA.b
扩展了ClassB
,所有ClassA
变量都可以随时访问protected static
的所有方法。