Maison > Java > Confus au sujet du polymorphisme et de la liaison statique en Java

Confus au sujet du polymorphisme et de la liaison statique en Java

PHPz
Libérer: 2024-02-11 09:30:08
avant
694 Les gens l'ont consulté

L'éditeur PHP Xigua reçoit souvent des questions sur le polymorphisme et la liaison statique en Java. Ces deux concepts sont souvent évoqués en Java mais peuvent prêter à confusion pour les débutants. Dans cet article, nous présenterons brièvement les concepts de polymorphisme et de liaison statique et répondrons à quelques questions fréquemment posées pour aider les lecteurs à mieux comprendre et appliquer ces concepts.

Contenu des questions

Je suis encore très nouveau sur Java. Je jouais donc avec Java en lisant sur le polymorphisme et la liaison statique. Je suis ici pour clarifier si mon processus de réflexion est correct.

class a {
    void foo(a a) {
        system.out.println("aaaaaa");
    }

}

class b extends a {
    void foo(b a) {
        system.out.println("bbbbb");
    }

}

class c extends b{
    void foo (a a){
        system.out.println("cccccbbbb");
    }

}
Copier après la connexion

J'ai créé l'objet suivant nommé c et appelé foo avec c comme argument.

C c = new C();
c.foo(c); // the output is BBBBB
Copier après la connexion

De cette question sur la surcharge et la liaison dynamique en Java, je comprends que si le paramètre envoyé n'est pas trouvé dans la classe, il convertira le paramètre (c dans ce cas) en celui où il peut être trouvé dans la classe argument (dans ce cas a, car void foo (a a)). Mais si tel est le cas, ne devrait-il pas afficher « cccccbbbb » ? Via une liaison statique ? void foo (a a))。但如果是这样的话,它不应该打印“cccccbbbb”吗?通过静态绑定?

解决方法

c 有 2 个重载方法,名称为 foo

Solution

c 的参数调用方法 foo 时,将选择最具体的一个 - 类 b 在层次结构上比类 a 更接近,因此调用 foo(b)Class

a 2 méthodes surchargées nommées foo🎜
// defined in the class C
void foo (A a){
    System.out.println("CCCCCBBBB");
}

// inherited from the class B
void foo(B a) {
    System.out.println("BBBBB");
}
Copier après la connexion
🎜Lorsque nous appelons la méthode foo avec les arguments de la classe 🎜, la classe la plus spécifique sera choisie - la classe b qui est hiérarchiquement supérieure à la classe a est plus proche, donc foo(b) est appelé. 🎜

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal