Le code suivant utilise le concept de substitution de méthode en Java.
package pkg; import java.util.ArrayList; import java.util.List; abstract class SuperClass { abstract public ListgetList(); } final class SubClass extends SuperClass { private Listlist=null; @Override public ArrayList getList() { list=new ArrayList(); list.add("A"); list.add("B"); return (ArrayList) list; } } final public class Main { public static void main(Ssortingng[] args) { SuperClass s=new SubClass(); Listlist=s.getList(); for(Ssortingng str:list) { System.out.println(str); } } }
Par convention, le remplacement de méthode utilise la même signature (avec le type de retour) à la fois en super classe et en sous-classe. Dans le code ci-dessus, le type de retour de la méthode getList()
dans la SuperClass
est List
et dans sa sous-classe, le type de retour est ArrayList
. Comment fonctionne la méthode prioritaire ici?
À propos, il est évident que ArrayList
est une implémentation de l’interface List
, mais comment le compilateur traite-t-il le type de retour ici tout en surchargeant la méthode getList()
?
Devrais-je croire quelque chose comme ceci … Le type de retour de la méthode substituée est autorisé à être un sous-type du type de retour de la méthode substituée.