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

Java中如何在抽象基类main方法中实例化派生类对象?

解决方案:通过反射在基类main中实例化对应子类

核心思路

执行java MOne 5这类命令时,JVM实际运行的是目标子类(MOne/MTwo/MThree),但子类继承了基类的main方法。我们可以通过反射机制获取当前运行的子类类名,动态实例化子类对象,再调用其实现的multiply方法。

完整代码实现

抽象基类 Calculation

public abstract class Calculation {
    // 抽象乘法方法,由子类实现具体逻辑
    public abstract int multiply(int num);

    public static void main(String[] args) {
        // 参数合法性校验
        if (args.length < 1) {
            System.err.println("缺少数字参数,请输入形如:java MOne 5 的命令");
            return;
        }

        int inputNum;
        try {
            inputNum = Integer.parseInt(args[0]);
        } catch (NumberFormatException e) {
            System.err.println("参数必须是整数");
            return;
        }

        try {
            // 获取当前运行的子类类名
            String className = Thread.currentThread().getStackTrace()[1].getClassName();
            // 反射实例化子类对象
            Calculation calculation = (Calculation) Class.forName(className)
                    .getDeclaredConstructor()
                    .newInstance();
            
            // 调用子类实现的multiply方法并输出结果
            System.out.println(calculation.multiply(inputNum));
        } catch (Exception e) {
            System.err.println("实例化子类失败:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

子类 MOne

public class MOne extends Calculation {
    @Override
    public int multiply(int num) {
        return num * 1;
    }
}

子类 MTwo

public class MTwo extends Calculation {
    @Override
    public int multiply(int num) {
        return num * 2;
    }
}

子类 MThree

public class MThree extends Calculation {
    @Override
    public int multiply(int num) {
        return num * 3;
    }
}

运行验证

编译所有类后,执行对应命令:

  • java MOne 5 → 输出 5
  • java MTwo 5 → 输出 10
  • java MThree 5 → 输出 15

补充方案

除了栈遍历获取类名,还可以通过JVM系统属性直接获取执行类名,避免栈遍历开销:

String commandLine = System.getProperty("sun.java.command");
String className = commandLine.split("\\s+")[0];

内容的提问来源于stack exchange,提问作者Michèle S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:49