java抽象类用abstract class声明,不能实例化,核心作用是“定契约、留实现”;可含普通字段、构造方法、具体方法和抽象方法;抽象方法无实现、以分号结尾,子类必须重写(除非子类也声明为abstract)。

Java 中抽象类用 abstract class 声明,不能直接 new 实例,核心作用是“定契约、留实现”——统一规范子类行为,同时允许复用公共逻辑。
抽象类怎么声明
在 class 关键字前加 abstract 即可,不要求必须含抽象方法:
- 哪怕一个 abstract 方法都没有,只要加了 abstract,这个类就是抽象类
- 可以包含普通字段、构造方法、具体方法(有 {} 实现)和抽象方法(无实现)
- 构造方法不能用于 new,但子类通过 super() 调用它完成初始化
- 不能被实例化,否则编译或运行时报错(如 InstantiationError)
抽象方法怎么写
抽象方法是抽象类中“只声明、不实现”的成员,语法严格:
- 必须用 abstract 修饰,且只能出现在抽象类(或接口)中
- 没有方法体,以分号结尾:public abstract void run();
- 不能是 private(子类看不见)、static(不依赖实例)、final(禁止重写)或 native
- 访问修饰符通常为 public 或 protected
子类怎么继承和实现
子类用 extends 继承抽象类,必须处理所有抽象方法:
- 如果子类不是抽象类,就必须重写父类中每一个抽象方法
- 若暂时无法全部实现,子类也得加 abstract 声明,把契约继续往下传
- 重写时方法签名必须匹配(参数、名称、返回类型协变允许),并加 @Override
- 可直接继承并调用抽象类里的具体方法,无需重写
典型使用场景
抽象类适合描述“共性明确、实现各异”的模型:
- 图形计算:Shape 定义 area() 抽象方法,Circle 和 Rectangle 各自实现公式
- 动物系统:Animal 定义 makeSound(),Dog 输出 “Bark”,Cat 输出 “Meow”
- 支付流程:PaymentProcessor 用模板方法封装验证、预处理、后处理,只留 executePayment() 交给子类实现
- 业务基类:提供通用日志、权限校验、异常包装等具体方法,仅将核心逻辑抽象出去
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











