我读了一本关于OOP的书,关于'protected'访问修饰符的例子对我来说很奇怪 .
Summary of example
-
这个例子是测试'protected'对变量的保留字效应 .
-
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是'protected'所以我认为它不能像 x.a = 1; 这样的实例变量访问
但是可以使用'static'关键字访问它 . 我怎么能理解这个?
Shortly A) is fine, but why is B) executable ?
1 回答
static
关键字表示变量属于类本身而不是所述类的对象 . 您可以使用ClassA.b
替换对x.b
的调用 . 由于ClassB
扩展ClassA
,因此ClassB
的所有方法始终可以访问所有protected static
变量 .