文档章节

为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?

不最醉不龟归
 不最醉不龟归
发布于 2016/11/22 17:04
字数 389
阅读 50
收藏 1

接口类

package javaDemo;

public interface FuInterface {
	public void run();
}

实现接口的子类

package javaDemo;

import java.util.ArrayList;
import java.util.List;

public class JavaDemo {

	public static void main(String[] args) {
		FuInterface f = new ZiClass();
		f.run();//只能使用接口本身有的方法,不能使用ZiClass类中独有的方法ziRun
	}
}

class ZiClass implements FuInterface{
	public void run(){
		//实现接口FuInterface里面的run方法
	}
	public void ziRun(){
		System.out.println("这是实现接口子类的ziRun方法");
	}
}

 

方便以后扩展
List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。
List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 
问题就在于List有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。  ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处

本文转载自:

共有 人打赏支持
不最醉不龟归
粉丝 18
博文 426
码字总数 446462
作品 0
深圳
程序员
私信 提问
Java——容器(List)

【List接口】 注:<1>List很类似与数组,但是它可以任意改变大小。 <2>ArrayList底层实现是数组,LinkedList底层实现是链表。 【常见方法】 【程序分析】 注:注意区分add方法和set方法的区别...

野渡书生
2016/03/11
15
0
C# ArrayList的用法

ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。 一、优点 1. 支持自动改变大小的功能 2. 可以灵活的插入元素 3. 可以灵活的删除元素 4. 可以灵活访问元素 二...

宁金峰
2017/11/02
0
0
ArrayList中subList实现

首先来看一个例子: 运行结果:[1, 2, 3, 4][2, 3][5, 3][1, 5, 3, 4] 由结果可推出:bList修改时,aList中的元素也将会修改。 下面来看一下ArrayList中subList的实现: subListRangeCheck只...

Antin_zhu
2016/07/02
10
0
ArrayList什么情况会抛出ConcurrentModificationException

近日,在看ArrayList的源码实现。发现很多情况会抛出ConcurrentModificationException。下面总结一下大致发生的情况。首先,ArrayList不是线程安全的。首先来看一个例子: 运行结果: 由例子...

Antin_zhu
2016/07/02
11
0
java:我们对Iterator理解错了

Iterator是解决不同容器的一种设计模型,同时支持ArrayList、LinkedList、HashSet、TreeSet集合数据的迭代。 image.png import typeinfo.pets.; import java.util.; public class CrossCont...

人人都能学编程
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Eos如何删除钱包

在使用Eos的keosd钱包软件时,如果要删除EOS中指定名称的钱包,最简单的办法是直接删除钱包文件,不过在删除钱包之前,需要先停止钱包软件的运行。 学习EOS应用开发要选这个:【EOS智能合约与...

geek12345
2分钟前
0
0
js操作时间

获取当前时间 function getSystemDate(){ var systemDate = new Date(); // 获取当年 var year = systemDate.getFullYear(); // 获取当月 (月+1是因为js中......

简心
9分钟前
0
0
区块链开发教程推荐

区块链的重要性已经毋庸置疑,但对大多数跃跃欲试的开发者而言,去中心化思想、非对称加密、共识算法等技术点的理解和运用,都是入门区块链开发的挑战。合适的区块链开发教程可以极大地缩短区...

笔阁
9分钟前
0
0
菜单menuView总结

1、FTPopOverMenu

_____1____
21分钟前
2
0
MyEclipse教程:Web开发——部署和测试Web项目

MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 本教程向用户展示了使用关联的Web项目创建Web片段项目的机制。用户还可以获得要检查的示例项目。在本教程中,用户将学习如...

电池盒
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部