首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解使用Superclass访问超类成员

理解使用Superclass访问超类成员
EN

Stack Overflow用户
提问于 2013-09-21 15:48:05
回答 1查看 163关注 0票数 6

我是在引用java语言规范来理解超级语言的使用。虽然我理解第一个用例,即

表单super.Identifier引用当前对象的名为标识符的字段,但将当前对象视为当前类的超类的实例。

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

表单T.super.Identifier引用与T对应的词汇包围实例的名为标识符的字段,但该实例被视为T超类的实例。

有谁能用密码来解释一下吗?

我认为以下可以说明第二种情况:

代码语言:javascript
复制
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 0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-21 16:14:00

我相信这也适用于这种情况

代码语言:javascript
复制
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引用与T对应的词汇包围实例的名为标识符的字段,但将该实例视为T的超类的实例。

Identifieroverriden,这个方法。

这里,lexically enclosing instanceChild类型的,它的超类是Parent。因此,T.super引用被视为ParentChild实例。

以上代码打印

代码语言:javascript
复制
parent
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18934545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档