首页 > 编程语言 >Java中List和ArrayList的区别,为什么用接口来引用对象而不是类

Java中List和ArrayList的区别,为什么用接口来引用对象而不是类

时间:2022-10-07 14:11:05浏览次数:46  
标签:Java 对象 list ArrayList List 接口 实例

区别用几句话来简单概述就是:
1、List是一个接口,而ArrayList是List接口的一个实现类。
2、 ArrayList类继承并实现了List接口。
3、因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们可以像下面那样为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。
因此在java中List list=new List(); 会导致编译出错,这是因为List是一个接口,接口不能被实例化。
而ArrayList list=new ArrayList();这种实例化方式就是正确的。这是因为ArrayList是一个类,继承并实现了List接口。
如何实例化List接口?
虽然List不能直接被实例化,但是他可以通过继承自本接口的实现类的对象实例化List对象,如List list=new ArrayList();这种实例化的方式:创建了一个ArrayList实现类的对象后把它上溯到了List接口。此时它就是一个List对象了,它有些ArrayList类具有的,但是List接口没有的属性和方法,它就不能再用了。 而 ArrayList list=newArrayList();创建一对象则保留了ArrayList的所有属性和方法。
两种实例化方式的区别?
那么问题来了,我们为什么不直接使用 ArrayList list=newArrayList();的方式来实例化ArrayList对象,并调用其中的方法,而有时候大部分会通过List list=new ArrayList();来实例化对象呢?
原因有二:
第一,两种实例化的方式由所区别,第一种方式创建的对象继承了ArrayList的所有属性和方法。 而第二种方式创建的对象只能调用List接口中的方法,不能调用ArrayList中的方法。
第二、使用第二种方式创建的对象更为方便。List接口有多个实现类,现在用的是ArrayList,如果要将其更换成其它的实现类,如 LinkedList或者Vector等等,这时只需要改变这一行就行了: List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。 在编写代码时,较为方便。

应该优先使用接口而不是类来引用对象,但只有存在适当的接口类型时。 使用接口类去引用对象是有前提条件的—实现类中全是接口类的方法的实现,没有自己单独的方法。
当实现类存在自己的方法时,使用实现类来声明变量。

使用接口编程的好处是统一规范化。

标签:Java,对象,list,ArrayList,List,接口,实例
From: https://www.cnblogs.com/binjianhuastudy/p/16759648.html

相关文章

  • 基于SSM+Vue企业员工培训管理系统Java公司内部培训系统(源码调试+讲解+文档)
    ......
  • javase复习记录
    为什么重写equals还要重写hashcode?==和equals比较的区别为啥有时会出现4.0-3.6=0.40000001这种现象?final关键字的作用介绍Java的集合类ArrayList和L......
  • JavaScript 学习-48.$.ajaxSetup方法设置AJAX的全局默认设置
    前言$.ajaxSetup方法用于设置AJAX的全局默认设置。之后执行的所有AJAX请求,如果对应的选项参数没有设置,将使用更改后的默认设置。这方便我们设置error统一返回样式。示......
  • javafx
    javafxapplicationJavaFX应用程序从中扩展的应用程序类。JavaFX应用程序的入口点是Application类。每当启动应用程序时,JavaFX运行时都会按顺序执行以下操作:构造指定Ap......
  • 技术栈——TODO List & 如何成为一名AI领域专家
    一个很重要的话题:如何成为一名AI领域专家?(1)从AI方向划分,这不再局限于视觉领域,可能还涉及自然语言NLP、语音、强化学习/反馈学习等方面(2)不仅仅只会训练模型,还要具备SDK开发......
  • Java泛型
    Java泛型本文源自https://www.yuque.com/qingkongxiaguang/javase/syy4rz#29e0f372欢迎大家去看b站这个Up主的Java视频https://www.bilibili.com/video/BV1Gv411T7pi?p=......
  • Java字段初始化的规律
    在Java中定义一个类后,有三种方式可以对其中的变量进行初始化:直接输入,初始化块,构造函数,而对于这三者的优先级,是:1.类的构造函数(构造方法):当创建一个对象时,其构造函数就会......
  • Java静态初始化块的执行顺序
    首先是各个类的静态初始化块先按照先父类后子类的顺序先后执行;然后再次由父类到子类开始依次执行它们的普通初始化块和无参构造器,若是子类初始化中需要为父类传参,那么在执......
  • javascript 经典功能代码和经验教程
    调整iframe的大小以适应其内容.txt:https://url18.ctfile.com/f/7715018-689115337-e76d2a?p=6511(访问密码:6511)调整表格列的大小.txt:https://url18.ctfile.com/f......
  • Collections之ArrayList源码解读(七)
    ......