首页 > 解决方案 > 从接口实现和从对象类扩展有什么区别?

问题描述

我是java新手,我希望这个问题不是太基本。我无法理解为什么需要接口,以及实现和继承之间有什么区别。

如果我想在我的程序中使用 Comparable 方法,(java.lang.Comparable)为什么我不能让我的类继承自Comparable

public class Main {

    public static void main(String[] args) {

    class DocumentReader extends Comparable;

为什么 IntelliJ 说“这里没有接口”?

标签: java

解决方案


松散地说,自 JDK 8 以来并不完全准确......但掌握基础知识还可以。

接口是实现该接口的类必须具有的方法规范。该接口不提供任何实现。因此,说你的类“实现了 Comparable”,它有义务提供一个带有特定签名的 compareTo 方法。

一个类可能包含实际的方法实现,也可能包含成员数据。扩展一个类本质上是该类的特化。你得到了基类所做的一切,你也许可以修改(通过覆盖基本方法)或扩充(通过添加新方法)。


除了有抽象方法之类的东西,基类不提供实现,因此迫使扩展类提供实现。

那么,从某种角度来看,您可以将接口视为一个抽象类,其中所有方法都是抽象的。这将是可行的,除了Java只允许一个类扩展一个类(没有'class X extends A,B'),但是一个类可以实现多个接口('class X implements A,B' - 我的语法可能不准确)。限制从多个类继承是有技术原因的,但我会在这里跳过。

正如我在一开始所说的那样,这在 JDK 8 中并不完全正确——接口中有“默认方法”,所以这条线有点模糊。

如果要以标准方式连接到其他对象,我会将接口视为对象必须提供的插头和插座类型的规范。您希望您的对象被“比较”,以便它们可以由其他组件按顺序排列?然后你必须实现 Comparable。


推荐阅读