抽象方法必须定义在abstract类中,仅含签名以分号结尾,不可有方法体;访问修饰符只能是public、protected或默认,禁止private、static、final等;非抽象子类必须重写所有抽象方法。

抽象方法必须写在抽象类里
Java 要求抽象方法只能出现在用 abstract 修饰的类中。如果类里有哪怕一个抽象方法,这个类就必须声明为 abstract class,否则编译直接失败。
声明语法:只有签名,没有花括号
抽象方法的写法非常严格——只写方法头,结尾是分号,绝对不能出现 {}、return、throw 或任何语句。例如:
✅ 正确写法:
public abstract void validate();
protected abstract String getName();
abstract boolean isReady();
❌ 常见错误:
• public abstract void validate() {} → 编译报错:abstract methods cannot have a body
• public abstract int getId() { return 0; } → 同样非法,哪怕只是返回默认值也不行
• private abstract void log(); → private 会阻止子类重写,违反抽象方法设计初衷
访问修饰符和禁止搭配的关键字
抽象方法必须能被子类继承并重写,因此:
- 推荐用 public 或 protected(不写修饰符也可,但仅限同包访问)
- 不能用 private(子类看不见)、static(属于类而非实例,无法多态)、final(禁止重写,与抽象目的冲突)
- 也不能用 synchronized、native 等与实现绑定的修饰符
子类必须响应这个“契约”
抽象方法本质是一份行为承诺:父类说“你得提供这个功能”,但不规定怎么做。所以:
- 非抽象子类必须用 @Override 实现每一个抽象方法
- 如果子类没实现完,又不想报错,就只能把自己也声明为 abstract
- 即使子类只想抛 UnsupportedOperationException,也得写完整方法体——那是实现,不是声明
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











