抽象方法必须用abstract修饰、无方法体、以分号结尾;含抽象方法的类须声明为abstract类;非抽象子类必须重写全部抽象方法,否则编译失败。

Java 抽象方法在抽象类中只声明不实现,关键在于三点:用 abstract 修饰、无方法体、以分号结尾。
语法必须严格符合规范
抽象方法不能写大括号 {},也不能写 return、抛异常或空语句。任何实际逻辑都会导致编译失败,报错 “abstract methods cannot have a body”。
- ✅ 正确写法:
public abstract void validate(); - ❌ 错误写法:
public abstract void validate() {} - ❌ 错误写法:
public abstract void validate() { return; } - ❌ 错误写法:
private abstract void log();(private 不可被子类访问,违背抽象方法设计目的)
抽象类的配套要求
只要类中有一个抽象方法,这个类就必须用 abstract class 声明;反过来,抽象类可以没有抽象方法,但依然禁止 new 实例。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 抽象类可以包含普通字段、构造器、具体方法(有实现)和抽象方法(无实现)
- 抽象类的构造器不是用来创建对象的,而是供子类
super()调用,完成初始化 - 抽象方法默认访问权限是
public或protected,显式写public更清晰、更安全
子类继承时的强制约束
非抽象子类继承抽象类后,必须重写全部抽象方法,且签名要完全匹配(返回类型、参数列表、异常声明),否则编译不通过。
- 若子类暂时无法实现全部抽象方法,应主动声明为
abstract class Sub extends Parent - IDE 通常能自动生成未实现方法的存根,但要注意泛型擦除或重载变体可能漏提示
- 不能用
static或final修饰抽象方法——前者属于类级别,后者禁止重写,都与“强制子类实现”冲突
它不是占位符,而是契约
抽象方法不是“先空着以后再补”,而是明确告诉子类:“你必须提供这个行为的具体逻辑”。比起空实现(如 return;),它由编译器强制校验,避免运行时因遗漏而崩溃。
- 典型场景:模板方法模式中,把差异步骤(如
processPayment()、sendNotification())定义为抽象方法 - 好处是结构清晰、职责分离,且错误提前暴露在编译期
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










