为什么找不到主方法时不生成异常或错误



好吧,只是为了知识,我尝试了以下情况(假设A类和B类在同一个包中(

A类

public class ClassA {
  public static void main(String[] args) {
     System.out.println("A");
  }
}

B类

public class ClassB extends ClassA {
  public static void main(String[] args) {
    System.out.println("B");
  }
}

在 B 类的以下变化后执行上述ClassB它将产生 B 的输出

B类

public class ClassB extends ClassA {
   //blank body
}

如果我编译并在terminal中运行,它会给我输出A这完全令人惊讶,因为它应该给出NoSuchMethodError,因为他们没有主要方法如此友好地解释奇怪的行为?

注意:许多答案包含Override单词请使用hiding因为我们无法覆盖 java 中的静态方法。

在第一种情况下,你隐藏了main方法,因为你在子类中定义了一个新的方法,在第二种情况下,你没有隐藏A 的主

请参阅 Java™ 教程 - 覆盖和隐藏:

如果子类定义了staticstatic超类中的方法,则子类中的方法隐藏超类中的方法。

在 Java 中,子类继承其基类的所有方法,包括静态方法。

使用超类中方法

的匹配名称和参数在子类中定义实例方法是一种覆盖。对静态方法执行相同的操作会隐藏超类的方法。

但是,隐藏并不意味着该方法消失:这两种方法都可以使用适当的语法进行调用。在您的第一个示例中,一切都很清楚:AB都有自己的main;调用A.main()打印A,而调用B.main()打印B

在第二个示例中,还允许调用B.main()。由于main是从A继承而来的,结果是打印A

public static void main(String[] args)只是您在第二种情况下从A继承的方法。

相关内容

  • 没有找到相关文章

最新更新