Heim >Java >javaLernprogramm >Wie ermittelt man die am besten passende Methode im Java-Funktionsüberladungsmechanismus?
Java-Funktionsüberladungs-Übereinstimmungsregeln sind: Genaue Übereinstimmung: Parametertyp und -nummer stimmen genau überein. Variable Parameter: Die variable Parametermethode stimmt mit einer beliebigen Anzahl oder einem beliebigen Parametertyp überein. Verpackungstyp und ursprüngliche Typkonvertierung: Grundtypen und Verpackungstypen können automatisch ineinander konvertiert werden. Boxen /unboxing: Grundlegende Typwerte und umschlossene Typobjekte können automatisch in abgeleitete Klassentypen konvertiert werden: Abgeleitete Klassenobjekte können mit Basisklassentypparametern übereinstimmen Mehrere Methoden in derselben Klasse mit demselben Namen, aber unterschiedlichen Parametertypen. Wenn eine überladene Methode aufgerufen wird, bestimmt die JVM anhand der Argumentliste die am besten passende aufzurufende Methode.
Bestimmen von Regeln für die beste Übereinstimmung
Genaue Übereinstimmung:
Wenn die Parameterliste einer Methode genau mit dem Typ und der Anzahl der aufrufenden Parameter übereinstimmt, ist die Methode die Methode mit der besten Übereinstimmung.
class Example { public void method(int a) { // ... } public void method(int a, int b) { // ... } }Der Aufruf von
method(1)
wird mit method(int a)
übereinstimmen.
class Example { public void method(Object... args) { // ... } public void method(int a, int b) { // ... } }
method(1)
oder method(1, 2, "Hello")
wird mit method(Object... args)
übereinstimmen >. method(1)
会匹配 method(int a)
。
class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
调用 method(1)
或 method(1, 2, "Hello")
都会匹配 method(Object... args)
。
Integer
)和相应的原始类型(例如 int
)可以相互转换。如果有一个方法匹配原始类型参数,而调用使用包装类型参数,或者反之亦然,则该方法仍然可以被认为是匹配的。class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
调用 method(1)
或 method(new Integer(1))
都能匹配这两个方法。
class Animal { public void makeSound() { // ... } } class Dog extends Animal { public void makeSound() { // ... } }
调用 method(1)
或 method(Integer.valueOf(1))
都能匹配这两个方法。
public class Shape { public void draw() { // ... } public void draw(int size) { // ... } public void draw(int size, boolean fill) { // ... } }
调用 makeSound(new Dog())
也会匹配 makeSound(Animal a)
方法。
实战案例
假设有一个 Shape
类,它有以下方法:
当调用 Shape shape = new Shape(); shape.draw(5);
时,JVM 会确定最匹配的方法为 draw(int size)
。这是因为调用中提供了 size
参数,而没有提供 fill
参数,因此 draw(int size, boolean fill)
Konvertierung zwischen Wrapper-Typen und primitiven Typen:
Integer
) und entsprechende primitive Typen (z. B. int
>) können ineinander umgewandelt werden. Wenn es eine Methode gibt, die mit einem Rohtypparameter übereinstimmt, aber mit einem umschlossenen Typparameter aufgerufen wird oder umgekehrt, kann die Methode dennoch als Übereinstimmung betrachtet werden. 🎜🎜rrreee🎜Rufen Sie method(1)
oder method(new Integer(1))
auf, um diese beiden Methoden abzugleichen. 🎜method(1)
oder method(Integer.valueOf(1))
auf, um diese beiden Methoden abzugleichen. 🎜makeSound(new Dog())
stimmt auch mit der Methode makeSound(Animal a)
überein. 🎜🎜🎜Praktischer Fall🎜🎜🎜Angenommen, es gibt eine Shape
-Klasse, die über die folgenden Methoden verfügt: 🎜rrreee🎜Beim Aufruf von Shape shape = new Shape(5); ;, die JVM bestimmt, dass die beste passende Methode <code>draw(int size)
ist. Dies liegt daran, dass der Parameter size
im Aufruf bereitgestellt wurde, nicht jedoch der Parameter fill
, sodass draw(int size, boolean fill)
kein Parameter ist genaue Übereinstimmung . 🎜
Das obige ist der detaillierte Inhalt vonWie ermittelt man die am besten passende Methode im Java-Funktionsüberladungsmechanismus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!