抽象类用abstract声明,不能实例化,用于定义模板结构并强制子类实现抽象方法;可含抽象与具体方法、构造器,子类须实现全部抽象方法或自身声明为abstract。

Java 中抽象类用 abstract 关键字声明,不能被实例化,主要用于定义模板结构和强制子类实现关键行为。
抽象类的基本语法
抽象类需用 abstract 修饰,可包含抽象方法(无方法体)和具体方法(有实现)。抽象方法也必须用 abstract 修饰,且不能是 private、static 或 final。
- 抽象类本身可以有构造方法(供子类调用),但不能直接 new 实例
- 抽象方法没有大括号和方法体,以分号结尾:
abstract void doSomething(); - 子类继承抽象类,必须实现所有抽象方法,或自身也声明为 abstract
什么时候该用抽象类
当多个类有共性属性和行为,但某些核心逻辑因具体类型而异时,适合提取为抽象类。
- 需要统一接口规范,又希望提供部分默认实现(比如通用日志、初始化逻辑)
- 存在“是什么”层面的继承关系(如 Animal → Dog/Cat),而非“能做什么”(那是接口的场景)
- 想约束子类必须具备某些能力,同时避免重复编写公共代码
抽象类 vs 接口的关键区别
抽象类支持成员变量、构造器、非 public 方法、以及部分方法实现;接口只能有 public static final 字段和 public abstract 方法(Java 8+ 可含 default/static 方法,但仍不能有实例字段或构造器)。
立即学习“Java免费学习笔记(深入)”;
- 一个类只能继承一个抽象类,但可实现多个接口
- 抽象类体现 is-a 关系,接口体现 can-do 关系
- 如果只是定义行为契约,优先用接口;若还需共享状态或基础实现,考虑抽象类
常见误用与注意事项
抽象类不是为了“防止创建对象”而存在,而是为了建模不完整但有共性的类型。
- 不要把工具类或纯静态方法集合强行设计成抽象类
- 抽象类中非抽象方法应尽量保持稳定,避免频繁修改影响所有子类
- 抽象方法命名要体现其职责,让子类清楚“必须做什么”,而不是“怎么去做”










