文档章节

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

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

本文转载自:

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
18分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
18分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
26分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
30分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部