You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中抽象类对象是否会被创建?结合示例代码答疑

抽象类构造方法被调用≠抽象类对象被创建

好问题!这确实是Java继承体系里一个容易让人困惑的点,我来给你掰扯清楚:

首先明确一个核心规则:抽象类永远不能被实例化,哪怕它的构造方法被调用了,也不代表有抽象类的对象被创建出来。

回到你的代码来看:

public abstract class AbstractObject { 
    AbstractObject(){ 
        System.out.println("mahi2"); 
    } 
} 
class PrintMahi extends AbstractObject{ 
    public static void main(String ... args){ 
        PrintMahi m = new PrintMahi(); 
    } 
}

当你执行new PrintMahi()时,JVM的执行流程是这样的:

  1. 先调用父类AbstractObject的构造方法,这是Java继承的强制要求——子类对象的创建必须先完成父类成员的初始化(毕竟子类继承了父类的属性和行为,这些得先准备好才能用)。
  2. 父类构造执行完毕后,才会继续执行子类PrintMahi的构造逻辑(你的代码里子类没写构造,所以JVM会自动生成一个默认构造)。

但整个过程中,只有一个PrintMahi类型的对象被创建,抽象类AbstractObject的构造方法只是在初始化这个子类对象中属于父类的那部分成员,而不是在创建一个独立的抽象类对象。

你可以做个小验证:给子类加个构造方法,打印当前对象的类型:

class PrintMahi extends AbstractObject{ 
    PrintMahi() {
        System.out.println(this.getClass()); // 输出 class PrintMahi
    }
    public static void main(String ... args){ 
        PrintMahi m = new PrintMahi(); 
    }
}

从输出就能看到,当前对象的类型始终是子类PrintMahi,根本不存在AbstractObject的对象。

总结一下:抽象类的构造方法作用是为子类对象的父类部分做初始化,它本身不能用来创建抽象类的对象——这也是抽象类被设计成“抽象”的原因之一,就是要强制你通过子类来实例化,而不能直接创建它的对象。

内容的提问来源于stack exchange,提问作者mahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:20:34