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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |