Ok tylko wiedzy sake, próbowałem poniżej przypadkach (Załóżmy, że klasa A i B są w tym samym opakowaniu)Dlaczego wyjątek lub błąd nie zostały wygenerowane, gdy nie znaleziono głównej metody?
ClassA
public class ClassA {
public static void main(String[] args) {
System.out.println("A");
}
}
ClassB
public class ClassB extends ClassA {
public static void main(String[] args) {
System.out.println("B");
}
}
wykonywania wyżej ClassB
będzie produkować wyjście B
teraz po niższej zmianie w klasie B
ClassB
public class ClassB extends ClassA {
//blank body
}
Jeśli mogę skompilować i uruchomić w terminal
daje mi moc A
że było zupełnie zaskakujące, jak powinno dał NoSuchMethodError
jako głównego sposobu nie było ich tak uprzejmie wyjaśnić dziwne zachowanie?
Uwaga: Wiele odpowiedzi zawiera Override
słowo Proszę używać hiding
jak my nie mogą przesłonić metody statyczne w Javie.
Nie ma metody "statycznej" przesłonięcia, ale ** ukrywa się **. W pierwszym przypadku 'ClassB' ukrywa metodę' main' z 'ClassA'. W drugim przypadku 'ClassB' nie ukrywa metody' main', więc wywoływana jest z 'ClassA'. –