文档章节

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

不最醉不龟归
 不最醉不龟归
发布于 2016/11/22 17:04
字数 389
阅读 28
收藏 1
点赞 0
评论 0

接口类

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(); ,便于程序代码的重构. 这就是面向接口编程的好处

本文转载自:

共有 人打赏支持
不最醉不龟归
粉丝 11
博文 262
码字总数 435067
作品 0
深圳
程序员
GridView的使用

一。xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layoutwidth="fillparent" android:layoutheight="fillparent" android:orientation="ver......

chuiyuan ⋅ 2014/05/06 ⋅ 0

Java——容器(List)

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

野渡书生 ⋅ 2016/03/11 ⋅ 0

C# ArrayList的用法

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

宁金峰 ⋅ 2017/11/02 ⋅ 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 ⋅ 0

ArrayList什么情况会抛出ConcurrentModificationException

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

Antin_zhu ⋅ 2016/07/02 ⋅ 0

java:我们对Iterator理解错了

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

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

ArrayList的使用

问题的提出 给出了两个时间点(例如,20060321,20080402),要求计算出中间的所有日期,并显示出来。在调用的时候需要拿一个容器将这些日期存放起来。但是,由于时间点是随机给出,不能确定数...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

这就是传说中的设计模式吗?

刚学java的人,由于书上的代码比较简单,他们往往不理解接口的好处。 至少当时我是理解不了。 他们会提问:直接声明这个方法不行吗?为什么非要多此一举用个接口呢? 后来稍微看了点【设计模...

jinceon ⋅ 2011/06/25 ⋅ 8

Java高级篇 -- List选择及优化

在java编程中,我们常常使用到java自带的集合类List 以下为几点简单的优化建议: 1.Vector还是ArrayList Vector有其特有有点,其每个方法都为同步方法【synchronized】,所以是线程安全的,在...

YOTOO ⋅ 2014/05/05 ⋅ 0

数组和arrayList的区别

一、数组与ArrayList的主要区别:效率、类型识别和primitive type。 数组([]):最高效;但是其容量固定且无法动态改变; ArrayList:容量可动态增长;但牺牲效率; 建议: 首先使用数组,无...

Fxing ⋅ 2010/10/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 18分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 19分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 21分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 22分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 22分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 25分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 25分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 32分钟前 ⋅ 0

微信小程序

小程序的全局配置app.json 微信小程序的全局配置保存在app.json文件中。开发者通过使用app.json来配置页面文件(pages)的路径、窗口(window)表现、设定网络超时时间值(networkTimeout)以...

上官清偌 ⋅ 35分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 36分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部