【发布时间】:2016-09-12 16:11:49
【问题描述】:
这是允许的:
public class Outer {
public static class Inner extends Outer { }
}
但这不是:
public class Outer extends Inner {
public static class Inner { }
}
在第二种情况下,编译器会抱怨Cyclic inheritance involving package.Outer。我没有看到任何周期;为什么第二种情况无效?
无论 Inner 是 class、abstract class 还是 interface,其行为都是相同的。
该用例用于递归数据结构——符号命名空间。基本上,我想要Namespace extends Namespace.Member,MyDataChunk extends Namespace.Member的命名结构;每个Namespace 都会像从String 到Namespace.Member 的映射,因此允许向下递归多个级别的Namespace,以MyDataChunk 终止。
【问题讨论】:
-
您看不到任何循环,但这是针对递归数据结构的。这似乎是矛盾的。另见stackoverflow.com/questions/33918022/…
-
@Tunaki 如果我没看错的话,类型不应该是循环的;实际的递归还没有出现(
Map<String, Member>的成员)。 -
@Tunaki 循环继承为
A extends B和B extends A,递归数据结构为A { member A }。在上面的代码中,如果我没看错的话,两者都不应该存在,尽管编译器会抱怨前者。 -
不,你得到一个混合循环:外部类继承自嵌套类,嵌套类是外部类的成员。
标签: java inheritance inner-classes