抽象类是模板,用于代码复用和共享状态,支持部分实现;接口是协议,定义行为规范,支持多继承,Java 8起可含默认方法。
接口和抽象类都是Java中实现抽象的重要机制,但它们在设计目的、语法限制和使用场景上有明显区别。
抽象类用于表示一种“是什么”的关系,强调的是类的继承。它适合定义一组相关类的共同属性和行为,允许部分方法具体实现,也允许子类复用代码。
接口更偏向于定义“能做什么”,是一种行为规范。它不关心对象的具体实现,只规定方法签名,让不同类之间可以拥有相同的功能契约。
默认是 public
当你需要为多个类提供公共代码或共享状态时,使用抽象类更合适。比如动物类都有一些共有的字段和行为。
当你希望定义一种能力,被完全无关的类所实现时,应选择接口。例如“可飞行”、“可序列化”这种特性。
现代Java开发中,接口更常用于解耦和扩展,配合lambda和函数式接口使用更加灵活。
基本上就这些。关键在于理解:抽象类是“模板”,接口是“协议”。