关于关键字超级和受保护成员的JLS 8

时间:2015-04-13 01:24:05

标签: java super jls

在JLS 8 15.11.2-1(第505页)中,我无法理解它们的含义:

  

请注意,由于在访问超类的super.x成员时遇到困难,因此未在演员方面指定protected

任何帮助?

1 个答案:

答案 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