Maison >Java >javaDidacticiel >La surcharge des méthodes Java prend-elle en compte les types de paramètres d'exécution pour la sélection des méthodes ?

La surcharge des méthodes Java prend-elle en compte les types de paramètres d'exécution pour la sélection des méthodes ?

DDD
DDDoriginal
2024-12-15 09:25:10176parcourir

Does Java Method Overloading Consider Runtime Parameter Types for Method Selection?

Surcharge de méthode et détermination du type de paramètre

En Java, la surcharge de méthode permet la définition de plusieurs méthodes avec le même nom mais des signatures différentes. Lorsqu'une méthode est appelée, l'implémentation spécifique à appeler est déterminée au moment de la compilation en fonction des types de paramètres déclarés de la méthode.

Cependant, il est important de noter que cette détermination est effectuée uniquement sur la base des types de paramètres déclarés. types, et non les types d'exécution réels des arguments transmis à la méthode. Ce comportement contraste avec certains langages de programmation, où les types d'exécution réels sont pris en compte lors de la sélection de la méthode.

Pour illustrer ce concept, considérons le code suivant :

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

Dans cet exemple, même si i est un objet Integer, l'appel à callee.foo(i) invoquera la méthode foo(Object o) car le type de paramètre déclaré de cette méthode est Object. De même, les appels à callee.foo(s) et callee.foo(o) invoqueront respectivement les méthodes foo(String s) et foo(Object o).

La sélection de méthode peut-elle prendre en compte le paramètre réel Types ?

La spécification du langage Java indique explicitement que le processus de sélection de méthode ne prend en compte que les types des arguments au moment de la compilation, et non leurs types d'exécution réels. Par conséquent, il n'est pas possible de modifier le code donné dans la question pour obtenir le comportement souhaité lorsque la méthode est invoquée en fonction du type d'exécution réel du paramètre.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn