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

Bha*_*odi 9 java program-entry-point

好的只是为了清酒知识,我尝试了下面的案例(假设A类和B类在同一个包中)

ClassA的

public class ClassA {

  public static void main(String[] args) {
     System.out.println("A");
  }
}
Run Code Online (Sandbox Code Playgroud)

ClassB的

public class ClassB extends ClassA {

  public static void main(String[] args) {
    System.out.println("B");
  }
}
Run Code Online (Sandbox Code Playgroud)

ClassB它上面执行它将B在classB下面的变化之后产生现在的输出

ClassB的

public class ClassB extends ClassA {
   //blank body
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*oun 7

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

请参阅The Java™Tutorials - Overriding and Hiding:

如果子类定义了static具有相同签名的方法 static在该方法中的超类,那么在该方法的子类 隐藏所述一个在超类.