【发布时间】:2016-05-18 03:31:05
【问题描述】:
我明白为什么 Java 中不允许类的循环继承,但我不明白为什么不允许接口的循环继承。举例说明:
interface Foo extends Bar {/*methods and constants*/}
interface Bar extends Foo {/*methods and constants*/}
接口不需要实例化,那么是什么阻止了它们相互扩展呢?
顺便说一句,我读了这个问题,但这不是关于接口而是类: Cyclic inheritance hierarchy in Java
提前致谢。
【问题讨论】:
-
允许这样做有什么好处?
-
...如果你愿意的话,你不能把它们完全合并在一起或者有一个共同的基础吗?
-
在极少数情况下,每个接口都适合“is-a”规则,因此可以相互扩展。事实并非如此。为什么不允许这样做?这对编程有任何危险吗?不是因为我肯定会使用它,而是因为我可以从中学到一些东西。
-
超类必须是类
-
如果
Foo extends Bar,那么Foo的每个实例也是Bar。如果Bar extends Foo,那么Bar的每个实例也是Foo。如果两者都被允许为真,那么满足这两个条件的唯一方法是Foo == Bar。
标签: java inheritance interface cyclic