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.
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"); } }
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
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
c
的参数调用方法 foo
时,将选择最具体的一个 - 类 b
在层次结构上比类 a
更接近,因此调用 foo(b)
Class
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"); }🎜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!