Java 了解如何使用Super访问超类成员

Java 了解如何使用Super访问超类成员,java,super,Java,Super,我参考java语言规范来理解super的使用。虽然我理解第一个用例,即 表单super.Identifier引用当前对象的名为Identifier的字段,但当前对象被视为当前类的超类的实例 我似乎无法理解以下用例: 格式T.super.Identifier是指与T相对应的词汇封闭实例的名为Identifier的字段,但该实例被视为T超类的实例 有人能用代码解释一下吗 我想下面可以说明第二种情况: class S{ int x=0; } class T extends S{ in

我参考java语言规范来理解super的使用。虽然我理解第一个用例,即

表单
super.Identifier
引用当前对象的名为Identifier的字段,但当前对象被视为当前类的超类的实例

我似乎无法理解以下用例:

格式
T.super.Identifier
是指与
T
相对应的词汇封闭实例的名为Identifier的字段,但该实例被视为
T
超类的实例

有人能用代码解释一下吗

我想下面可以说明第二种情况:

class S{
    int x=0;
}

class T extends S{
    int x=1;
    class C{
        int x=2;
        void print(){

            System.out.println(this.x);
            System.out.println(T.this.x);
            System.out.println(T.super.x);
        }
    }
    public static void main(String args[]){
        T t=new T();
        C c=t.new C();
        c.print();
    }
}
输出: 2. 1.
我相信它适用于这种情况

public class Main {
    static class Child extends Parent{
        class DeeplyNested {
            public void method() {
                Child.super.overriden();
            }
        }

        public void overriden() {
            System.out.println("child");
        }
    }
    static class Parent {
        public void overriden() {
            System.out.println("parent");
        }
    }
    public static void main(String args[]) {
        Child child = new Child();
        DeeplyNested deep = child.new DeeplyNested();
        deep.method();
    }
}
在JLS中

格式T.super.Identifier指的是名为Identifier的字段 对应于T的词汇封闭实例,但具有 实例被视为T超类的实例

标识符
被方法
覆盖

这里,
词汇性封闭实例
的类型为
Child
,其超类为
Parent
。因此
T.super
引用了被视为
Parent
Child
的实例

上面的代码打印出来

parent