抽象方法必须定义在abstract类中,且只能有签名无方法体;子类须全部实现或自身声明为abstract;其本质是定义行为契约而非未完成代码。

抽象方法必须写在抽象类里
Java 要求抽象方法只能出现在用 abstract 修饰的类中。如果一个类里有哪怕一个抽象方法,这个类就必须声明为 abstract,否则编译直接报错:class is not abstract and does not override abstract method。
声明格式严格:只有签名,结尾是分号
抽象方法不能有任何方法体,连空的大括号 {} 都不允许。正确写法是:
访问修饰符 abstract 返回值类型 方法名(参数列表);
例如:public abstract void validate();protected abstract boolean canExecute();abstract String getName();(默认包权限也可,但不推荐)
常见错误包括:
• 写成 public abstract void validate() {} → 报错:abstract methods cannot have a body
• 在里面写 return null; 或 throw new UnsupportedOperationException(); → 同样非法
• 用 private、static 或 final 修饰 → 编译不通过,因为这些与“强制子类实现”冲突
子类必须实现,否则自己也得标 abstract
继承抽象类的子类,有两种选择:
• 实现父类所有抽象方法,成为具体类,可以 new 实例
• 不实现全部,那它自己也必须用 abstract 声明,继续向下传递契约
比如父类有 abstract void start(); 和 abstract void stop();,子类只重写了 start(),就必须加 abstract class MyDevice extends Device,否则编译失败。
抽象方法不是“没写完”,而是“故意留白”
它的作用不是省事,而是定义统一行为契约。比如 abstract double getArea(); 表示“所有图形都必须能算面积”,但圆怎么算、矩形怎么算,由子类决定。这种设计把“做什么”和“怎么做”分开,是模板方法等设计模式的基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











