一、抽象类和接口对比
相同点:
-
都支持抽象方法: 抽象类和接口都可以包含抽象方法,这些方法没有具体的实现,需要在子类中实现。
-
都可以被继承: 子类可以继承抽象类,也可以实现接口。
-
都可以包含具体方法: 从 Java 8 开始,接口也可以包含默认方法(default methods),提供默认的实现。
-
都不能被实例化: 既不能实例化抽象类,也不能实例化接口。
不同点:
-
实现方式:
- 抽象类使用
abstract
关键字定义,可以包含抽象方法和具体方法。 - 接口使用
interface
关键字定义,只能包含抽象方法(在 Java 8 之前),或者包含默认方法和静态方法(在 Java 8 及之后)。
- 抽象类使用
-
构造器:
- 抽象类可以有构造器,而接口不能有构造器。
-
字段:
- 抽象类可以包含实例字段,而接口只能包含常量字段(
static final
)。
- 抽象类可以包含实例字段,而接口只能包含常量字段(
-
多继承:
- 一个类只能继承一个抽象类,但可以实现多个接口。这是 Java 编程语言的一个关键区别,是为了避免多继承的复杂性问题。
-
用途:
- 抽象类通常用于具有某种共同特性的类,可以包含一些通用的方法和字段,也可以包含抽象方法,由子类实现。
- 接口通常用于定义一组相关的操作,可以被多个类实现。接口提供了一种机制,允许类在不同的继承体系中共享共同的功能。