Java如何合并两个分属不同文件的类 解决main方法重复定义报错
问题原因
- 你遇到的
method main(String[]) is already defined错误,本质是Java不允许同一个类中存在两个方法签名完全一致的方法,你原先的两个类各自有一个public static void main(String[] args)入口方法,合并到同一个类里就会触发重复定义冲突。 - 之前合并后只有一个类生效的问题,是因为Java程序运行时只会执行你指定的启动类的
main方法,另一个类的逻辑没被调用自然不会运行。
解决方案
方案1:保留单入口,把原GFG的逻辑整合到lapTimes类中
直接把秒转分钟的方法移到lapTimes类里,在统一的main方法里同时调用两类逻辑即可,合并后的完整代码如下:
public class lapTimes { // 原GFG类的秒转时分方法 static void ConvertSectoDay(int n) { n %= 3600; int minutes = n / 60 ; n %= 60; int seconds = n; System.out.println( minutes + " " + "minutes " + seconds + " " + "seconds "); } public void lap1(int lap) { System.out.println("How many seconds for lap one: " + lap); } public void lap2(int lap) { System.out.println("How many seconds for lap two: " + lap); } public void lap3(int lap) { System.out.println("How many seconds for lap three: " + lap); } public void lap4(int lap) { System.out.println("How many seconds for lap four: " + lap); } public static void main(String[] args) { // 调用原GFG类的逻辑 ConvertSectoDay(200); // 调用原lapTimes类的逻辑 lapTimes run = new lapTimes(); run.lap1(34); run.lap2(54); run.lap3(43); run.lap4(61); } }
方案2:同文件保留两个类,删除其中一个的main方法
如果不想把方法合并到同一个类里,也可以在同一个Java文件里保留两个类,只留一个main方法作为统一入口,在入口里调用另一个类的逻辑即可:
class GFG { static void ConvertSectoDay(int n) { n %= 3600; int minutes = n / 60 ; n %= 60; int seconds = n; System.out.println( minutes + " " + "minutes " + seconds + " " + "seconds "); } } public class lapTimes { public void lap1(int lap) { System.out.println("How many seconds for lap one: " + lap); } public void lap2(int lap) { System.out.println("How many seconds for lap two: " + lap); } public void lap3(int lap) { System.out.println("How many seconds for lap three: " + lap); } public void lap4(int lap) { System.out.println("How many seconds for lap four: " + lap); } public static void main(String[] args) { // 调用GFG类的逻辑 GFG.ConvertSectoDay(200); // 调用lapTimes自身的逻辑 lapTimes run = new lapTimes(); run.lap1(34); run.lap2(54); run.lap3(43); run.lap4(61); } }
注意事项
- 单Java文件中最多只能有一个被
public修饰的类,且文件名必须和这个public类的类名完全一致,否则会编译失败。 - 如果需要两类逻辑分开运行,也可以给不同的逻辑封装成不同的方法,在main方法里通过入参判断执行哪部分逻辑即可。
内容的提问来源于stack exchange,提问作者FriedOrangeSlice
相关产品推荐
相关产品推荐

