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

如何通过父类SuperFoo统一子类Foo1/Foo2/Foo3重复的main方法?

解决方案:复用父类的通用逻辑

你完全可以通过反射在父类SuperFoo中实现一个通用的main方法,让所有子类无需重复编写相同的代码。另外也有非反射的简化方案,下面分别介绍:

方案一:反射实现通用父类main方法

这个方案让父类负责创建子类实例并调用bar(),子类不需要自己编写main方法——要注意的是:Java中静态方法不会被继承,不过我们可以通过反射获取当前运行的子类类名,从而动态创建实例。

父类实现(带反射逻辑)

class SuperFoo {
    public static void main(String[] args) {
        try {
            // 获取当前运行的子类类名
            String className = Thread.currentThread().getStackTrace()[1].getClassName();
            Class<? extends SuperFoo> clazz = Class.forName(className).asSubclass(SuperFoo.class);
            
            // 创建子类实例并调用bar()
            SuperFoo instance = clazz.getDeclaredConstructor().newInstance();
            instance.bar();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 父类定义bar方法(如果是抽象方法可以强制子类实现)
    public void bar() {
        // 父类默认实现,子类可重写
    }
}

子类如何使用

现在子类只需要专注实现自己的bar()逻辑,完全不用写main:

class Foo1 extends SuperFoo {
    @Override
    public void bar() {
        System.out.println("Foo1's bar method executed");
    }
}

运行时直接执行子类的全类名(比如java Foo1),JVM会调用父类的main方法,自动反射创建Foo1实例并执行bar()。

方案二:非反射的简化方案(更安全直观)

如果你不想依赖反射,也可以把通用逻辑抽成父类的静态方法,子类的main只需要一行代码调用它,既避免重复又保持代码清晰:

父类实现

class SuperFoo {
    public static <T extends SuperFoo> void run(Class<T> clazz) {
        try {
            T instance = clazz.getDeclaredConstructor().newInstance();
            instance.bar();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void bar() {
        // 默认实现
    }
}

子类实现

class Foo1 extends SuperFoo {
    public static void main(String[] args) {
        SuperFoo.run(Foo1.class);
    }

    @Override
    public void bar() {
        System.out.println("Foo1's bar method executed");
    }
}

额外优化:强制子类实现bar方法

如果所有子类都必须自定义bar()逻辑,建议把SuperFoo设为抽象类,bar()定义为抽象方法,这样能强制子类实现,避免遗漏:

abstract class SuperFoo {
    // ... 上面的main或run方法 ...

    public abstract void bar(); // 子类必须实现此方法
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:08:52