「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」
🌊 作者主页:海拥
🌊 作者简介:🏆CSDN全栈领域优质创作者、🥇HDZ核心组成员
🌊 粉丝福利:粉丝群 每周送六本书,不定期送各种小礼品
抽象类 vs 接口
- 方法类型: 接口只能有抽象方法。抽象类可以有抽象和非抽象方法。从 Java 8 开始,它也可以有默认和静态方法。
- 最终变量: 在 Java 接口中声明的变量默认是最终的。抽象类可能包含非最终变量。
- 变量类型: 抽象类可以有final、non-final、静态和非静态变量。接口只有静态和最终变量。
- 实现: 抽象类可以提供接口的实现。接口不能提供抽象类的实现。
- 继承 vs 抽象: Java 接口可以使用关键字“implements”来实现,抽象类可以使用关键字“extends”进行扩展。
- 多重实现: 一个接口只能扩展另一个Java接口,一个抽象类可以扩展另一个Java类并实现多个Java接口。
- 数据成员的可访问性: 默认情况下,Java 接口的成员是公共的。Java 抽象类可以具有私有、受保护等类成员。
1 | java复制代码import java.io.*; |
输出
1 | java复制代码矩形面积:6.0 |
如果您在矩形和圆形之间没有任何通用代码,请使用界面。
1 | java复制代码import java.io.*; |
输出
1 | java复制代码矩形面积:6.0 |
什么时候用什么?
如果以下任何陈述适用于您的情况,请考虑使用抽象类:
- 在java应用程序中,有一些相关的类需要共享一些代码行,那么你可以将这些代码行放在抽象类中,并且这个抽象类应该由所有这些相关类进行扩展。
- 您可以在抽象类中定义非静态或非最终字段,以便您可以通过方法访问和修改它们所属的对象的状态。
- 您可以期望扩展抽象类的类具有许多公共方法或字段,或者需要除 public 之外的访问修饰符(例如 protected 和 private)。
如果以下任何陈述适用于您的情况,请考虑使用接口:
- 它是一个完全的抽象,接口中声明的所有方法都必须由实现此接口的类来实现。
- 一个类可以实现多个接口。它被称为多重继承。
- 您想指定特定数据类型的行为,但不关心谁实现其行为。
本文转载自: 掘金