Java 面试题解析:main 方法可以继承吗?
在 Java 面试中,关于 main 方法的特性常是考察重点。很多初学者会疑惑,既然 main 是程序的入口,它是否遵循常规的继承规则?
main 方法的特殊之处
我们编写第一个 Java 程序时,最先接触的就是 main 方法。它的标准签名如下:
public static void main(String[] args) { }
这个签名并非随意定义,而是由 JVM 规范决定的。public 保证了 JVM 能够访问该方法;static 意味着无需实例化对象即可调用,符合虚拟机直接调用的场景;void 表示程序退出时无需返回值;而 String[] args 用于接收命令行参数,使用字符串数组是因为其通用性强且支持多参数传递。值得注意的是,自 JDK 1.5 引入可变参数后,String... args 也是合法的写法。
重载与调用
除了作为入口点的标准 main 方法外,我们可以像定义普通静态方法一样对 main 进行重载。例如:
public class Main {
public static void main(String args) {
System.out.println("hello world:" + args);
}
public static void main(String[] args) {
main("test");
}
}
编译运行没有问题。此外,main 方法也可以被其他静态方法调用,但需注意控制循环逻辑,避免死循环导致程序无法关闭。
关于'继承'的真相
回到核心问题:main 方法可以继承吗?
很多人认为当父类定义了 main 方法,子类没定义时,运行子类也能执行父类的 main。实际上,由于 main 是静态方法,它属于类而非实例。如果子类没有重新定义 main 方法,直接运行子类通常会报错找不到主方法。但如果子类重写了 main 方法,则会隐藏父类的实现。
public class Main {
public static void main(String[] args) {
System.out.println("hello world");
}
}
public class {
{
System.out.println();
}
}

