java - 抽象类的静态方法和抽象方法为什么不能同名同参?
PHP中文网
PHP中文网 2017-04-17 18:00:38
0
5
624
public abstract class Test {

    public static void test(){

    }

    public abstract void test();

}

我觉得这样可以的啊~~为什么编译失败。

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(5)
伊谢尔伦

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

左手右手慢动作

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

TestMethod.java:6 : Erreur : la méthode test()

est déjà définie dans la classe TestMethod
public void test(){
            ^ 1 个错误

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal