答案 0 :(得分:4)
考虑一下:
public class T2 {
protected int x = 2;
}
/* in a different package */
public class T3 extends T2 {
int x = 3;
void test() {
System.out.println(this.x); // prints 3
System.out.println(super.x); // prints 2
T2 this_as_t2 = (T2)this;
System.out.println(this_as_t2.x); // Error: Can't access protected member x of class T2
System.out.println(((T2)this).x); // Same error as above
}
}
如果super.x
等同于((T2)this).x
,那么您将无法使用super.x
来引用x
中的T2
字段
因此规范不说它们是等同的(因为它们并非总是如此)。但是,它们在某些情况下仍然相同 - 例如,如果两个类都在同一个包中,或者字段是public
。