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特有的方法和属性,则都需改动。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律