企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## [抽象类和接口](https://lingcoder.gitee.io/onjava8/#/book/10-Interfaces?id=%e6%8a%bd%e8%b1%a1%e7%b1%bb%e5%92%8c%e6%8e%a5%e5%8f%a3) 尤其是在 Java 8 引入**default**方法之后,选择用抽象类还是用接口变得更加令人困惑。下表做了明确的区分: | 特性 | 接口 | 抽象类 | | :-: | :-: | :-: | | 组合 | 新类可以组合多个接口 | 只能继承单一抽象类 | | 状态 | 不能包含属性(除了静态属性,不支持对象状态) | 可以包含属性,非抽象方法可能引用这些属性 | | 默认方法 和 抽象方法 | 不需要在子类中实现默认方法。默认方法可以引用其他接口的方法 | 必须在子类中实现抽象方法 | | 构造器 | 没有构造器 | 可以有构造器 | | 可见性 | 隐式**public** | 可以是**protected**或友元 | 抽象类仍然是一个类,在创建新类时只能继承它一个。而创建类的过程中可以实现多个接口。 有一条实际经验:尽可能地抽象。因此,更倾向使用接口而不是抽象类。只有当必要时才使用抽象类。除非必须使用,否则不要用接口和抽象类。大多数时候,普通类已经做得很好,如果不行的话,再移动到接口或抽象类中。