package one;
public class A {
protected int first;
protected static int second;
}
package two;
import one.A;
public class B extends A {
public void someMethod() {
this.first = 5; //works as expected
B.second = 6; //works
A a = new A();
// a.first = 7; does not compile
//works just fine, but why?
a.second = 8;
A.second = 9;
}
}
为什么静态字段没有同样的限制,背后的想法是什么?
B
是A
的子类,因此可以访问受保护的成员。 6.6.2强制执行实例成员的限制。两个不同的合同。如果B
与A
在同一个包中,则B
仍然可以访问A.second
而无需扩展。 - Dioxin