Heim  >  Artikel  >  Java  >  Warum meldet eine Unterklasse beim Aufruf einer überladenen Methode einen Fehler?

Warum meldet eine Unterklasse beim Aufruf einer überladenen Methode einen Fehler?

王林
王林Original
2024-03-08 17:33:03521Durchsuche

Warum meldet eine Unterklasse beim Aufruf einer überladenen Methode einen Fehler?

In Java kommt es sehr häufig vor, dass Unterklassen Fehler melden, wenn sie überladene Methoden aufrufen. Überladung bezieht sich auf die Situation, in der mehrere Methoden mit demselben Namen in einer Klasse, aber mit unterschiedlichen Parameterlisten definiert sind. Wenn eine Unterklasse eine überladene Methode in der übergeordneten Klasse aufrufen möchte, kommt es manchmal zu Kompilierungsfehlern. Als nächstes werde ich anhand konkreter Codebeispiele die Gründe veranschaulichen, warum Unterklassen beim Aufruf überladener Methoden Fehler melden.

Angenommen, wir haben eine übergeordnete Klasse ParentClass, die zwei überladene Methoden definiert:

public class ParentClass {
    public void printInfo(String str) {
        System.out.println("Printing String: " + str);
    }

    public void printInfo(int num) {
        System.out.println("Printing Integer: " + num);
    }
}

Als nächstes erstellen wir eine Unterklasse ChildClass und versuchen, die überladene Methode in der übergeordneten Klasse aufzurufen:

public class ChildClass extends ParentClass {
    public void printInfo(double val) {
        System.out.println("Printing Double: " + val);
    }

    public static void main(String[] args) {
        ChildClass child = new ChildClass();
        child.printInfo("Hello"); // 这行代码会报错
    }
}

Im obigen Code erbt die Unterklasse ChildClass die übergeordnete Klasse ParentClass und definiert eine neue überladene Methode printInfo(double val). In der Hauptmethode erstellen wir eine untergeordnete Instanz von ChildClass und versuchen, die Methode printInfo(String str) in der übergeordneten Klasse aufzurufen.

Wenn wir jedoch versuchen, den obigen Code zu kompilieren, erhalten wir den folgenden Kompilierungsfehler:

Error: method printInfo in class ParentClass cannot be applied to given types;
required: int
found: java.lang.String

Der Grund für diesen Fehler ist, dass Java beim Aufrufen einer Methode anhand der Nummer und die spezifische aufzurufende Methode bestimmt Art der übergebenen Parameter. In diesem Fall versucht die Unterklasse ChildClass, die Methode printInfo(String str) in der übergeordneten Klasse aufzurufen. Da diese Methode jedoch in der Unterklasse nicht überladen ist, sucht der Compiler nach der am besten passenden Methode und stellt fest, dass nur die Methode printInfo(int num)-Methode Der Aufruf kann abgeschlossen werden, aber printInfo(String str) kann nicht gefunden werden.

Um dieses Problem zu lösen, können wir die überladene Methode in der übergeordneten Klasse in der Unterklasse überschreiben oder die überladene Methode in der übergeordneten Klasse explizit aufrufen. Zum Beispiel:

public class ChildClass extends ParentClass {
    @Override
    public void printInfo(String str) {
        System.out.println("Overriding method in ChildClass: " + str);
    }

    public void callParentMethod(String str) {
        super.printInfo(str); // 显式调用父类中被重载的方法
    }

    public static void main(String[] args) {
        ChildClass child = new ChildClass();
        child.printInfo("Hello"); // 调用子类中重写的方法
        child.callParentMethod("World"); // 显式调用父类中的重载方法
    }
}

Durch das Überschreiben von Methoden in der übergeordneten Klasse oder den expliziten Aufruf von übergeordneten Klassenmethoden können wir Fehler vermeiden, wenn Unterklassen überladene Methoden aufrufen. Auf diese Weise können Sie die Gründe besser verstehen, warum Unterklassen beim Aufruf überladener Methoden Fehler melden, und lernen, wie Sie solche Probleme lösen können.

Das obige ist der detaillierte Inhalt vonWarum meldet eine Unterklasse beim Aufruf einer überladenen Methode einen Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn