JAVA学习笔记-- List与ArrayList的关系

List是一个接口,而ArrayList是List接口的一个实现类。

ArrayList继承并实现了List接口。因此,List接口不能被构造,也就是我们所说的不能创建实例对象。但我们可以为List接口创建一个指向自己的对象引用。而ArrayList实现类的实例对象就在这里充当了这个指向List接口的对象引用。

我们知道接口和抽象类不能被实例化,但可以创建一个指向自己的对象引用。

class Test{

public static void main(String[] args){

Animal a1 = new Animal();//编译出错

Animal a2 = new Dog();

}

}

abstract class Animal{

//动物名字

String name;

//动物叫声

public void shout(){

System.out.println("叫声...");

}

}

class Dog extends Animal{

//狗类独有的方法

public void guard(){

System.out.println("狗有看门的独特本领!");

}

}

List list;//正确,list = null;

List list = new List();//错误

List list = new ArrayList();//创建了一个ArrayList实现类的对象把它上溯到了List接口。现在它就是一个List对象了,只能只用List的属性和方法。而ArrayList list = new ArrayList();则保留了ArrayList的所有属性和方法。

List l1 = new ArrayList();

l1 拥有List的所有属性和方法,不会拥有其实现类ArrayList独有的属性和方法。

如果List与ArrayList有相同的属性(i),和相同的方法(void f()),则l1.i是调用了List中的i,l1.f()是调用了ArrayList中的f()。

关键:为什么要用List list = new ArrayList();而不用ArrayList list = new ArrayList()?

因为List有多个实现类,假设现在用的是Arraylist,之后如果要换为其他的实现类,如LinkedList,Vector等,只需改变这一行就可以了:List list = new LinkedList();其他使用List地方的代码则不需改动。假设用ArrayList list = new ArrayList();如果使用了ArrayList特有的方法和属性,则都需改动。

posted @ 2022-11-05 13:33  一统天下。  阅读(112)  评论(0编辑  收藏  举报