Les règles de correspondance de surcharge de fonctions Java sont : Correspondance exacte : le type et le numéro du paramètre correspondent exactement. Paramètres variables : la méthode des paramètres variables correspond à n'importe quel nombre ou type de paramètres. Conversion du type d'emballage et du type d'origine : les types de base et les types d'emballage peuvent être automatiquement convertis les uns aux autres. /unboxing : les valeurs de type de base et les objets de type encapsulés peuvent être automatiquement convertis en types de classe dérivés : les objets de classe dérivés peuvent correspondre aux paramètres de type de classe de base
Règles de correspondance du mécanisme de surcharge de fonctions Java
Surcharge de fonctions autorisée Créer plusieurs méthodes dans la même classe avec le même nom mais des types de paramètres différents. Lorsqu'une méthode surchargée est appelée, la JVM détermine la meilleure méthode correspondante à appeler en fonction de la liste d'arguments.
Détermination des règles pour la meilleure correspondance
class Example { public void method(int a) { // ... } public void method(int a, int b) { // ... } }
L'appel de method(1)
correspondra à method(int a)
. method(1)
会匹配 method(int a)
。
class Example { public void method(Object... args) { // ... } public void method(int a, int b) { // ... } }
调用 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 Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
调用 method(1)
或 method(Integer.valueOf(1))
都能匹配这两个方法。
class Animal { public void makeSound() { // ... } } class Dog extends Animal { public void makeSound() { // ... } }
调用 makeSound(new Dog())
也会匹配 makeSound(Animal a)
方法。
实战案例
假设有一个 Shape
类,它有以下方法:
public class Shape { public void draw() { // ... } public void draw(int size) { // ... } public void draw(int size, boolean fill) { // ... } }
当调用 Shape shape = new Shape(); shape.draw(5);
时,JVM 会确定最匹配的方法为 draw(int size)
。这是因为调用中提供了 size
参数,而没有提供 fill
参数,因此 draw(int size, boolean fill)
method(1)
ou method(1, 2, "Hello")
correspondra à method(Object... args)
. 🎜Integer
) et types primitifs correspondants (tels que int
>) peuvent être convertis les uns dans les autres. S'il existe une méthode qui correspond à un paramètre de type brut mais qui est appelée avec un paramètre de type encapsulé, ou vice versa, la méthode peut toujours être considérée comme une correspondance. 🎜🎜rrreee🎜Appelez method(1)
ou method(new Integer(1))
pour faire correspondre ces deux méthodes. 🎜method(1)
ou method(Integer.valueOf(1))
pour faire correspondre ces deux méthodes. 🎜makeSound(new Dog())
correspondra également à la méthode makeSound(Animal a)
. 🎜🎜🎜Cas pratique🎜🎜🎜Supposons qu'il existe une classe Shape
, qui a les méthodes suivantes : 🎜rrreee🎜Lors de l'appel de Shape shape = new Shape(); ;, la JVM déterminera que la meilleure méthode de correspondance est <code>draw(int size)
. En effet, le paramètre size
a été fourni dans l'appel mais pas le paramètre fill
, donc draw(int size, boolean fill)
n'est pas un correspondance exacte . 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!