[Java] 抽象类与接口的区别

JDK8之前,接口的定义是严格的:只能定义变量和抽象方法,且不能写方法体,但是JDK8之后可以在接口中定义静态(static)方法和默认(default)方法

具体区别

  1. 实现方式:

    • 接口(Interface):接口是一种完全抽象的类型,它只能包含抽象方法和常量字段。接口中的方法都没有具体的实现,只有方法签名。类通过实现(implements)接口来使用接口定义的方法,一个类可以同时实现多个接口。
    • 抽象类(Abstract Class):抽象类是一种半抽象的类型,它可以包含抽象方法和具体方法。抽象方法没有具体实现,而具体方法可以有代码块。类通过继承(extends)抽象类来使用抽象类定义的方法。
  2. 多继承支持:

    • 接口:Java支持类实现多个接口,这使得接口在多继承场景下非常有用。
    • 抽象类:Java不支持类继承多个抽象类,一个类只能继承一个抽象类。这是因为Java中类的继承是单一继承的。
  3. 构造方法:

    • 接口:接口不能包含构造方法,因为接口不能直接实例化。
    • 抽象类:抽象类可以有构造方法,并且在实现类的构造方法中通过super关键字调用抽象类的构造方法。
  4. 字段(成员变量):

    • 接口:接口中的字段都是常量,它们默认是public、static、final的,不能被修改。
    • 抽象类:抽象类可以有各种字段,可以是常量、实例变量,或者是静态字段。
  5. 用途:

    • 接口:接口主要用于定义一组相关的方法,让不同的类实现这些方法,从而实现多态性。接口常用于定义类之间的契约,实现接口的类必须提供接口中声明的所有方法。
    • 抽象类:抽象类可以用于定义通用的属性和方法,并且可以为子类提供一些默认的实现。抽象类常用于设计基类,提供一些公共行为,但不用完全实现子类的业务逻辑。

[Java] 抽象类与接口的区别_第1张图片

你可能感兴趣的:(java)