C'est parce que les signatures des méthodes statiques et des méthodes d'instance ne peuvent pas être les mêmes, car Java permet d'appeler des méthodes statiques de classe sur des objets d'instance. C'est précisément à cause de cette autorisation que les méthodes avec la même signature ne peuvent pas être utilisées.
public class Test {
// public void main(String[] args) {} // Error
public static void main(String[] args) {
Test.hello(); // OK
new Test().hello(); // OK
}
public static void hello() {
System.out.println("hi");
}
}
À votre avis, qui devrait être exécuté par JVM ? Même si ce sont toutes des méthodes normales, elles ne peuvent pas avoir le même nom et les mêmes paramètres Le jvm sera stupide
Les méthodes statiques et abstraites sont définies par des classes. Puisqu'elles sont toutes définies par des classes, elles ne doivent pas avoir le même nom et les mêmes paramètres.
C'est parce que les signatures des méthodes statiques et des méthodes d'instance ne peuvent pas être les mêmes, car Java permet d'appeler des méthodes statiques de classe sur des objets d'instance. C'est précisément à cause de cette autorisation que les méthodes avec la même signature ne peuvent pas être utilisées.
À votre avis, qui devrait être exécuté par JVM ?
Même si ce sont toutes des méthodes normales, elles ne peuvent pas avoir le même nom et les mêmes paramètres Le jvm sera stupide
Signature de la méthode : le caractère unique de la méthode est déterminé par le nom de la méthode et le type de données du paramètre
Les noms de méthodes et les paramètres des deux méthodes ci-dessus sont cohérents, ce qui entraîne une erreur lors du processus de compilation
Ceci est lié à la fonctionnalité liaison dynamique de Java
Les méthodes statiques et abstraites sont définies par des classes. Puisqu'elles sont toutes définies par des classes, elles ne doivent pas avoir le même nom et les mêmes paramètres.
La surcharge et la réécriture en Java ne permettent pas de telles règles.