Java 与'有什么区别;受保护';和';防静电';变量?
我读了一本面向对象编程和 关于“受保护”访问修饰符的示例对我来说很奇怪 示例摘要Java 与'有什么区别;受保护';和';防静电';变量?,java,oop,static,protected,Java,Oop,Static,Protected,我读了一本面向对象编程和 关于“受保护”访问修饰符的示例对我来说很奇怪 示例摘要 本例旨在测试“受保护”保留字对变量的影响 ClassA有2个受保护的变量(静态/非静态) ClassB派生自ClassA并位于另一个包中 ClassB.test有一个检查可访问性的方法(无法运行) 实际上,b是“受保护的”,所以我认为它不能被实例变量访问,比如x.a=1 但它可以通过“static”关键字访问。 我怎么能理解这个 简而言之A)可以,但是B)为什么是可执行的?关键字static表示变量属于类
实际上,b是“受保护的”,所以我认为它不能被实例变量访问,比如x.a=1强>
但它可以通过“static”关键字访问。 我怎么能理解这个
简而言之A)可以,但是B)为什么是可执行的?关键字
static
表示变量属于类本身,而不是所述类的对象。您可以将对x.b
的调用替换为ClassA.b
。由于ClassB
扩展了ClassA
,因此ClassB
的所有方法都可以随时访问所有受保护的静态变量 我不明白你的帖子,请说得更清楚。如果你能更新你的示例代码,让我们知道编译器错误的确切位置吗?@TimBiegeleisen为方便起见。我将编译器错误标记为[X]-不可执行。
package a;
public Class A {
protected int a;
protected static int b;
}
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)
}
}