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
DDDOriginal
2024-12-15 09:25:10176Durchsuche

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);

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!

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