【Java面试手册-基础篇】Java中的main()方法能否被覆盖重写?

答案是否定的,因为main方法是静态方法,静态方法是一个类方法,在使用的时候不需要实例化,是直接使用类名来调用方法的,而在Java中静态方法在编译时会结合在一起,所以不能覆盖静态方法,覆盖是针对于实例方法而言的。

下面来看一个具体的示例,先创建两个类 MainParent.javaMainChild.java

MainParent.java

package com.magic.main;

public class MainParent {

    public static void main(String[] args) {
        System.out.println("Hello, Parent");
    }
}

MainChild.java

package com.magic.main;

public class MainChild extends MainParent {

    public static void main(String[] args) {
        System.out.println("Hello, Child");
    }

}

上面的 MainChild.java 中的 main() 方法看似是覆盖了 MainParent.java 中的,但实际上并不是真正的覆盖,只是它们拥有相同签名的方法而已。通常情况下,如果子类覆盖父类的方法,是需要在方法上加上 @Override 注解的,尝试给子类的 main() 方法加上 @Override,会直接提示错误,无法正确编译的。

public class MainChild extends MainParent {

    @Override
    public static void main(String[] args) {
        System.out.println("Hello, Child");
    }
}

具体的错误信息如下:

Method does not override method from its superclass

更多有关Java面试相关的知识点可以关注【Java面试手册】小程序,涉及Java基础、多线程、JVM、Spring、Spring Boot、Spring Cloud、Mybatis、Redis、数据库、数据结构与算法等。

【Java面试手册-基础篇】Java中的main()方法能否被覆盖重写?

Original: https://www.cnblogs.com/javatop/p/16514544.html
Author: 然笑后端
Title: 【Java面试手册-基础篇】Java中的main()方法能否被覆盖重写?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586446/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球