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!