加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 多级静态嵌套类产生错误的输出

发布时间:2020-12-15 00:25:30 所属栏目:Java 来源:网络整理
导读:当运行以下代码时,会按照语言规范的要求打
当运行以下代码时,会按照语言规范的要求打印“X.Q”而不是“A
class A<T> {
    static class X {
        static class Q {
            public static void main() {
                System.out.println("A<T>.X.Q");
            }
        }
    }
}

class B extends A<B.Y.Q> {
    static class Y extends X {
    } // X here is inherited from A
}

class X {
    static class Q {
        public static void main() {
            System.out.println("X.Q");
        }
    }
}

public class Test {
    public static void main(String[] args) {
        B.Y.Q.main();
    }
}

有些人可以帮助我了解这个程序的输出是什么,根据我的理解,应该是“A< T> .X.Q”而不是“X.Q”,请纠正我,如果我错了一些

解决方法

您收到“X.Q”的原因是X指的是X范围限定为未命名的包,而不是A< T> .X.在B之后声明“外部”X并不重要,因为Java编译器在解析B.Y的基类的名称之前看到它.

您可以在代码中强制从A.X继承如下:

class B extends A<B.Y.Q> {
    static class Y extends A.X {
    } //                   ^^
      //                Add this
}

Demo 1.

编辑:(感谢user695022的评论)

奇怪的是,如果外部类不是通用的,则问题消失:

class A {
    static class X {
        static class Q {
            public static void main() {
                System.out.println("A<T>.X.Q");
            }
        }
    }
}

Demo 2.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读