gpt4 book ai didi

java - 为什么Java禁止继承内部接口(interface)?

转载 作者:IT老高 更新时间:2023-10-28 21:01:14 25 4
gpt4 key购买 nike

即为什么下面的“循环依赖”是不可能的?

public class Something implements Behavior {
public interface Behavior {
// ...
}
}

由于接口(interface)不引用外部类,这应该是允许的;但是,编译器迫使我在类之外定义这些接口(interface)。这种行为有什么合乎逻辑的解释吗?

最佳答案

spec中的相关规则:

http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.4

A class C directly depends on a type T if T is mentioned in the extends or implements clause of C either as a superclass or superinterface, or as a qualifier of a superclass or superinterface name.

http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.1.3

An interface I directly depends on a type T if T is mentioned in the extends clause of I either as a superinterface or as a qualifier within a superinterface name.

因此,如果 A extends|implements B.C,A 依赖于 CB。然后,规范禁止循环依赖。

在依赖项中包含 B 的动机尚不清楚。正如你所提到的,如果将 B.C 提升为顶级 C2,就类型系统而言并没有太大的不同,那么为什么 A extends C2 没问题,但 A extends B.C 不行?授予嵌套类型 B.C 确实对 B 的内容有一些特权访问,但我在规范中找不到任何使 A 扩展 B.C 麻烦。

唯一的问题是当 C 是一个内部类。假设 B=AA extends A.C 应该被禁止,因为存在“封闭实例”的循环依赖。这可能是真正的动机——禁止外部类继承内部类。实际的规则更通用,因为它们更简单,而且即使对于非内部类也很有意义。

关于java - 为什么Java禁止继承内部接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7993560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com