【问题标题】:Closeable extends AutoCloseableCloseable 扩展 AutoCloseable
【发布时间】:2018-11-13 14:46:53
【问题描述】:
我最近在浏览 jdk 1.8 的 src.zip 文件,发现了一些很奇怪的东西。
public interface Closeable extends AutoCloseable
而且由于 AutoCloseable 也是一个接口,那么 java 中的任何东西如何允许扩展 呢?
当我尝试使用任何其他界面时,我不断收到错误消息:
Runnable 类型不能是 userDefine Class 的超类;超类必须是类。
那么,为什么会出现这种差异?还是我错过了什么?如果有,请给我解释一下。
【问题讨论】:
标签:
java
inheritance
interface
【解决方案1】:
如果您只是从自然语言的角度来考虑,接口可以扩展其他接口,因为它们扩展它们对实现类的要求。它们是更具体的合同。
如果一个接口使用implements 关键字来表达这个想法,那么它会令人困惑。 “实施”的意思是“提供实施”,这不是这里发生的事情。
因此:
- 接口可以扩展接口
- 类可以扩展类
- 类可以实现接口
【解决方案2】:
接口extends 接口。 不是implements。
在继承时,您使用关键字extends,无论是当一个类从一个类继承还是一个接口从另一个接口继承时。
【解决方案3】:
说到接口,关键字extends可以看成是类的implements。
这会将超级接口的功能添加到扩展对象