抽象类和普通类最本质的区别在于:抽象类是设计契约的“半成品模板”,普通类是可直接运行的“完整实现体”;抽象类不能实例化、可含无方法体的抽象方法、强制子类实现规范,普通类可直接new、方法必须有具体实现、独立可用。

抽象类和普通类最本质的区别在于:抽象类是设计契约的“半成品模板”,普通类是可直接运行的“完整实现体”。
能不能直接创建对象
普通类支持用 new 创建实例,比如 new Dog()、new Car(),对象一建好就能调用全部方法;抽象类禁止实例化,写 new Animal() 会编译报错——它不是用来造对象的,而是用来被继承的。
方法是否允许“留空”
普通类所有方法都必须有具体实现(即带 {} 的方法体),哪怕只是空花括号;抽象类可以定义抽象方法(如 public abstract void cry();),没有方法体,也不写大括号,只声明“子类必须提供这个功能”,由子类强制补全。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
设计意图和使用场景不同
普通类聚焦于“做什么”,封装一个独立可用的功能单元;抽象类聚焦于“是什么+该怎么做”,既抽取共性代码(比如共享字段、通用逻辑),又通过抽象方法划出行为边界,强制子类统一接口。比如 Shape 抽象类规定所有图形必须有 area() 方法,但圆、矩形各自算法不同。
继承时的约束强度不一样
子类继承普通类,完全自由,可重写也可不重写父类方法;子类继承抽象类,若自身不是抽象类,则必须实现父类中所有抽象方法,否则编译通不过——这是编译器级别的强制规范,不是靠文档或约定来保障的。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










