Différence :
List est une interface et ArrayList est une classe d'implémentation de l'interface List. La classe ArrayList hérite et implémente l'interface List.
Par conséquent, l'interface List ne peut pas être construite, c'est-à-dire que nous ne pouvons pas créer d'objets d'instance, mais nous pouvons créer une référence d'objet pointant vers nous-mêmes pour l'interface List comme suit, et l'objet d'instance de ArrayList La classe d'implémentation est Cela agit comme une référence d'objet à l'interface List.
Animals.java public abstract class Animals { //动物名字 String name; //动物叫声 public void shout(){ System.out.println("叫声----"); } } Dog.java public class Dog extends Animals { //狗类独有的方法 public void guard(){ System.out.println("狗独有的看门本领"); } } Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a1 = new Animals(); Animals a2 = new Dog(); } }
List list;//正确,list = null; List list = new List();//是错误的用法
List list = new ArrayList();
Cette phrase crée un objet de la classe d'implémentation ArrayList et le trace jusqu'à l'interface List. Pour le moment, il s'agit d'un objet List. Il possède certaines propriétés et méthodes que la classe ArrayList possède mais n'a pas dans l'interface List. Il ne peut plus être utilisé. Cependant,
ArrayList list=newArrayList();
crée un objet et. conserve toutes les propriétés de ArrayList et des méthodes.
Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a2 = new Dog(); a2.shout(); a2.guard(); } }
La classe parent ne peut plus appeler les méthodes qui apparaissent dans la classe parent mais pas dans la classe enfant. Sinon, des erreurs de compilation se produiront.
Si cela ressemble à ceci :
List a=new ArrayList();
Alors a a toutes les propriétés et méthodes de List, et n'aura pas les propriétés et méthodes uniques de sa classe d'implémentation ArrayList.
Si List et ArrayList ont les mêmes attributs (comme int i) et la même méthode (comme void f()),
alors a.i appelle i, a.f dans List() appelle f() dans ArrayList ;
La clé du problème :
Pourquoi devrions-nous utiliser List list = new ArrayList()
au lieu de ArrayList alist = new ArrayList()
?
Le problème est que l'interface List a plusieurs classes d'implémentation. Vous utilisez maintenant ArrayList. Peut-être qu'un jour vous devrez passer à d'autres classes d'implémentation, telles que :
LinkedList ou Vector, etc. . Pour le moment, il vous suffit de modifier cette ligne : List list = new LinkedList();
Les autres codes où la liste est utilisée n'ont pas du tout besoin d'être modifiés.
Supposons que vous commenciez à utiliser ArrayList alist = new ArrayList()
, mais que vous deviez maintenant apporter quelques modifications, surtout si vous utilisez les méthodes et propriétés uniques à la classe d'implémentation ArrayList.
Tutoriel recommandé : Tutoriel Java
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!