Heim > Java > javaLernprogramm > Berücksichtigt das Überladen von Java-Methoden Laufzeitparametertypen für die Methodenauswahl?

Berücksichtigt das Überladen von Java-Methoden Laufzeitparametertypen für die Methodenauswahl?

DDD
Freigeben: 2024-12-15 09:25:10
Original
174 Leute haben es durchsucht

Does Java Method Overloading Consider Runtime Parameter Types for Method Selection?

Methodenüberladung und Bestimmung des Parametertyps

In Java ermöglicht die Methodenüberladung die Definition mehrerer Methoden mit demselben Namen, aber unterschiedlichen Signaturen. Wenn eine Methode aufgerufen wird, wird die spezifische aufzurufende Implementierung zur Kompilierungszeit basierend auf den deklarierten Parametertypen der Methode bestimmt.

Es ist jedoch wichtig zu beachten, dass diese Bestimmung ausschließlich auf der Grundlage der deklarierten erfolgt Typen, nicht die tatsächlichen Laufzeittypen der an die Methode übergebenen Argumente. Dieses Verhalten steht im Gegensatz zu bestimmten Programmiersprachen, bei denen die tatsächlichen Laufzeittypen bei der Methodenauswahl berücksichtigt werden.

Um dieses Konzept zu veranschaulichen, betrachten Sie den folgenden Code:

interface Callee {
    public void foo(Object o);
    public void foo(String s);
    public void foo(Integer i);
}

class CalleeImpl implements Callee
    public void foo(Object o) {
        logger.debug("foo(Object o)");
    }

    public void foo(String s) {
        logger.debug("foo(\"" + s + "\")");
    }

    public void foo(Integer i) {
        logger.debug("foo(" + i + ")");
    }
}

Callee callee = new CalleeImpl();

Object i = new Integer(12);
Object s = "foobar";
Object o = new Object();

callee.foo(i);
callee.foo(s);
callee.foo(o);
Nach dem Login kopieren

In diesem Beispiel Obwohl i ein Integer-Objekt ist, ruft der Aufruf von callee.foo(i) die Methode foo(Object o) auf, da der deklarierte Parametertyp dieser Methode Object ist. In ähnlicher Weise rufen die Aufrufe von callee.foo(s) und callee.foo(o) die Methoden foo(String s) bzw. foo(Object o) auf.

Kann die Methodenauswahl den tatsächlichen Parameter berücksichtigen? Typen?

Die Java-Sprachspezifikation besagt ausdrücklich, dass der Methodenauswahlprozess nur die Typen der Argumente zur Kompilierungszeit berücksichtigt, nicht ihre tatsächlichen Laufzeittypen. Daher ist es nicht möglich, den in der Frage angegebenen Code zu ändern, um das gewünschte Verhalten zu erreichen, wenn die Methode basierend auf dem tatsächlichen Laufzeittyp des Parameters aufgerufen wird.

Das obige ist der detaillierte Inhalt vonBerücksichtigt das Überladen von Java-Methoden Laufzeitparametertypen für die Methodenauswahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage