


Berücksichtigt das Überladen von Java-Methoden Laufzeitparametertypen oder nur zur Kompilierungszeit deklarierte Typen?
Überladende Methodenauswahl: Reale vs. deklarierte Parametertypen
In der Java-Programmierung bieten überladene Methoden die Flexibilität, mehrere Methoden mit denselben zu definieren Namen, aber unterschiedliche Parameterlisten. Wenn eine Methode aufgerufen wird, bestimmt der Compiler anhand der bereitgestellten Argumentliste die geeignete aufzurufende Methode.
In bestimmten Szenarien fragen Sie sich jedoch möglicherweise, ob bei der Methodenauswahl stattdessen der tatsächliche (Laufzeit-)Typ des Parameters berücksichtigt wird des deklarierten Typs. Betrachten Sie den folgenden Code:
interface Callee { void foo(Object o); void foo(String s); void foo(Integer i); } class CalleeImpl implements Callee { @Override public void foo(Object o) { System.out.println("foo(Object o)"); } @Override public void foo(String s) { System.out.println("foo(\"" + s + "\")"); } @Override public void foo(Integer i) { System.out.println("foo(" + i + ")"); } } public class Main { public static void main(String[] args) { 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); } }
Unerwartet gibt dieser Code „foo(Object o)“ für alle drei Aufrufe aus. Entgegen der Intuition berücksichtigt die Methodenauswahl nicht die tatsächlichen Parametertypen (Integer, String und Object). Stattdessen verlässt es sich ausschließlich auf die deklarierten Parametertypen in der Callee-Schnittstelle.
Dieses Verhalten ergibt sich aus der Java-Sprachspezifikation, in der ausdrücklich Folgendes angegeben ist:
When a method is invoked, the number of actual arguments and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked.
Daher ist es wichtig zu beachten dass in Java der dynamische Methodenversand, bei dem die tatsächlich aufzurufende Methode zur Laufzeit basierend auf dem Objekt bestimmt wird, für das sie aufgerufen wird, nur für das Objekt selbst gilt, nicht für die Parametertypen.
Das obige ist der detaillierte Inhalt vonBerücksichtigt das Überladen von Java-Methoden Laufzeitparametertypen oder nur zur Kompilierungszeit deklarierte Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wenn Sie TKMybatis für Datenbankabfragen verwenden, ist das Aufbau von Abfragebedingungen ein häufiges Problem. Dieser Artikel wird ...
