PS:黑色加粗为重点关注内容
相同点:
- 抽象类和接口都不能实例化
不同点:
|
参数 |
抽象类 |
接口 |
|
声明 |
抽象类使用 abstract 关键字声明 |
接口使用 interface 关键字声明 |
|
实现 |
子类使用 extends 关键字来继承抽象类。 |
子类使用 implements 关键字来实现接口。 |
|
构造器 |
抽象类可以有构造器 |
接口不能有构造器。 |
|
方法的类型 |
既有抽象方法,还可以有已经实现的普通方法 |
只有抽象方法 |
|
多继承 |
一个类最多只能继承一个抽象类 |
一个类可以实现多个接口 |
|
成员变量 |
抽象类的成员变量可以是任意类型 |
接口的成员变量默认都是 public static final |
|
1.8的特性 |
通过使用 default 修饰方法,定义一个默认的方法,实现类可以直接调用,不用强制实现 |
抽象类和接口的本质:
- 接口
- 接口的目的是对类的行为进行约束,是一种行为的规范;
- 强制要求不同的实现类具有相同的方法;
- 只约束行为的有无,不限制行为的具体实现
- 抽象类
- 抽象类的目的是代码复用
- 通常会实现子类的通用特性,而将子类的差异化特性进行抽象,交由子类去实现
- 抽象类和接口的选择:
- 关注一个事物本质的时候,用抽象类;关注一个行为的时候,用接口
- 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
- 抽象类通常是:需要定义子类的行为,又要为子类提供通用的功能。
文章详细对比了Java中的抽象类和接口,包括它们的声明方式、实现方式、构造器、方法类型以及多继承特性。接口主要用于约束类的行为,抽象类则用于代码复用,提供子类的通用功能。在选择时,关注行为时优先考虑接口,关注本质时选择抽象类。
7603

被折叠的 条评论
为什么被折叠?



