java强制非抽象子类必须实现父类所有抽象方法,否则编译失败;抽象方法无方法体、以分号结尾,所在类须声明为abstract且不可实例化;抽象子类可延后实现部分抽象方法;构造器中调用抽象方法易致运行时异常,应禁止。

Java 通过编译器强制检查来限制子类必须重写父类的抽象方法——只要子类不是 abstract 的,就必须实现父类中所有未实现的抽象方法,否则编译直接失败。
抽象方法与抽象类的硬性约束
抽象方法本身没有方法体(连大括号都不允许),声明以分号结尾,例如:
protected abstract void executeCore();
包含它的类必须用 abstract 修饰;该类不能被 new 实例化,仅作为契约存在。
非抽象子类必须全部实现
当一个普通(非 abstract)类继承抽象父类时:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 编译器会逐个扫描父类所有抽象方法
- 若任一抽象方法未被重写,编译报错,提示类似:
class XXX must either be declared abstract or implement abstract method YYY in ZZZ - 重写时方法签名(名称、参数类型、返回类型)必须严格匹配,访问权限不能更严格(如父类是 protected,子类不能用 private)
抽象子类可选择性延后实现
如果子类自己也声明为 abstract,则不受“必须实现”的限制:
- 它可以只实现部分抽象方法,把剩余抽象方法继续留给下级子类
- 这适合构建多层抽象结构,比如:BaseProcessor → ValidatingProcessor → PaymentProcessor
- 只有最末一级具体子类才承担完整实现责任
避免构造器中调用抽象方法
这个细节容易引发运行时问题:
- 抽象类构造器里若调用了 abstract 方法,而子类字段尚未初始化,可能导致 NullPointerException
- 即使语法允许,也属于危险设计,应严格禁止
- 模板方法(如 final void process())应在子类对象完全构造完毕后才被调用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










