普通类和抽象类有哪些区别:编码选用核心标准
普通类和抽象类有哪些区别,核心体现在实例化、方法定义、继承规则、使用场景四个核心维度,普通类可直接实例化调用、包含完整可执行方法,适合落地具体业务逻辑,抽象类无法实例化、可包含抽象空方法,适合统一子类通用规范、抽取公共代码,大多数日常业务开发中,具体功能实现优先用普通类,框架层级统一约束子类行为优先用抽象类。
普通类与抽象类的核心属性差异
普通类是Java中最基础的实体类结构,所有方法都必须拥有完整的方法体,不存在无实现的空方法,你可以随时通过new关键字创建普通类的对象实例,独立调用类中所有属性和方法,无需依赖其他子类即可完成功能运行。普通类的设计核心是功能落地,能够直接承载具体的业务操作,没有任何使用前置约束。
抽象类被abstract关键字修饰,核心限制是无法实例化,绝对不能通过new关键字创建对象。抽象类既可以包含带完整方法体的普通方法、构造方法、成员变量,也可以包含无方法体、仅做声明的抽象方法,抽象方法仅用于定义方法规则,不实现具体逻辑,强制子类完成落地编写。
无抽象方法的抽象类依然存在实例化限制,这是很多开发者容易出错的点,仅靠抽象类修饰符也能锁住类的创建权限,仅用于单纯抽取公共代码。
普通类与抽象类的继承重写规则
普通类被继承后,子类可选择性重写父类方法,也可以直接沿用父类所有功能,没有强制重写的约束要求。子类仅在需要修改父类原有逻辑、拓展新功能时,主动覆写对应方法,开发灵活性更高,适配多变的个性化业务场景。
抽象类被继承后,子类必须覆写父类中所有的抽象方法,否则该子类也必须定义为抽象类,继续保留未实现的方法规则。这一机制可以有效统一所有子类的核心方法结构,避免子类出现功能缺失、方法命名不统一的问题,大幅降低多子类协作开发的出错概率。
普通类与抽象类场景选择对比
| 对比维度 | 普通类 | 抽象类 |
|---|---|---|
| 实例化能力 | 支持直接new实例化 | 完全不支持实例化 |
| 方法特性 | 仅含完整实现方法 | 可含抽象方法、普通方法 |
| 继承约束 | 子类无强制重写要求 | 子类需覆写全部抽象方法 |
| 适用场景 | 具体业务功能实现 | 统一子类规范、抽取公共代码 |
抽象类的适用边界明确,仅适合顶层代码设计、框架封装、多子类统一规范场景,不适合单次、独立的简单业务开发,强行使用会增加代码冗余和开发成本。
在Java开发行业通用编码规范(阿里巴巴Java开发手册2022版)中,明确要求:仅存在统一行为约束、多子类共性抽取需求时使用抽象类,单一独立业务功能必须使用普通类,以此保障代码简洁性与规范性。
简单业务,直接用普通类。
需要统一多个子类行为、复用公共代码,优先用抽象类。
