贝利信息

Java里抽象类和普通类有什么区别_Java抽象设计说明

日期:2026-01-07 00:00 / 作者:P粉602998670
抽象类不能直接实例化,普通类可以;抽象类可含抽象方法且子类必须实现,否则自身须声明为abstract;抽象类可定义构造方法供子类调用。

抽象类不能直接 new,普通类可以

这是最直观、也是编译器最先报错的区别。当你写 new Shape()(假设 Shape 是抽象类),Java 直接拒绝编译,提示 "Cannot instantiate the type Shape"。而普通类如 RectangleString,调用 new Rectangle(2.0, 3.0) 完全合法。

抽象类可以含 abstract 方法,普通类绝对不行

在普通类中写 public abstract void doSomething(); 会立刻触发编

译错误:"Illegal combination of modifiers: 'public' and 'abstract'"。而抽象类中,抽象方法是核心设计手段。

继承时子类必须实现抽象方法,否则自己也得标 abstract

这是最容易踩坑的一环:你以为继承了抽象类就“搞定”,结果编译报错 "The type X must implement the inherited abstract method Y"

抽象类支持构造方法,但仅用于子类初始化时调用

很多人以为“不能 new 就不能有构造方法”,其实抽象类完全可以定义 Shape(String name) 这样的构造器,而且子类 super("circle") 必须显式调用它。

抽象类的设计意图从来不是“多写几个关键字”,而是明确划出一条线:哪些能力必须由具体子类决定(抽象方法),哪些逻辑可以复用(普通方法),哪些状态属于全家共有(字段)。一旦混淆“能实例化”和“该不该实例化”,或者把抽象方法当成可选接口,就容易写出既难扩展又难测试的继承树。