文档章节

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

不最醉不龟归
 不最醉不龟归
发布于 2016/11/22 17:04
字数 389
阅读 42
收藏 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(); ,便于程序代码的重构. 这就是面向接口编程的好处

本文转载自:

共有 人打赏支持
不最醉不龟归
粉丝 15
博文 423
码字总数 445380
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部