我的意思是说,为什么要用 List list = new ArrayList(); 这样的语句,而不是用 ArrayList list = new ArrayList(); 后者不是更规范吗?许多程序都用前者,有何好处呢?类似的还有这样的构造: Object ob = new Vector();
还是以这个构造举例: List list = new ArrayList(); 这个list对象是不是可以调用所有ArrayList里的方法?而对外的接口则只考虑 List这个界面下的方法? 如果我觉得ArrayList不理想,想换成LinkedList,除了变动声明一下以外,只 需改动调用ArrayList的方法,对外接口不变,是这样的吗?
何不敲两个demo尝试一下呢 !
LZ的意思应该是:为什么不直接定义为:ArrayList list = new ArrayList(); 而要定义为:List list = new ArrayList();吧,这是因为ArrayList继承自List,也就是说在List中实现的方法,在ArrayList中一定得到了实现,所以当你调用一些List中的方法时时行得通的。举个例子说一下:Father是一个父类,Son是个子类,你可以这样定义:Father f = new Son(); 不知道LZ是否明白了,如果还是不明白的话,就看看马士兵讲的有关java视频吧,看看就明白了。
楼上的各位说我现在定义为 List list = new ArrayList(); 哪一天觉得使用ArrayList的数据结构不理想,想换成LinkedList,把上面 这个statement换成 List list = new LinkedList();就行了。 因为对外接口都是基于List的,而不是ArrayList中定义的方法。 那么为什么不一开始就写成 List list = new List();呢?
介绍多态时候这就是一个例子 声明称List 实现接口list,使用不同的实例而且执行不同的操作 list 声明为ArrayList 或者linkedList 接口执行相对应的操作
这是父类引用指向子类 加大程序的灵活性 比如List list = new ArrayList(); 现在要改成LinkedList 基本程序代码是不用改变的 不知楼主是否能体会这种写法带来的好处?
package com.yang.csdntest;import java.util.ArrayList; import java.util.LinkedList; import java.util.List;public class InterfaceProgram { public void testlist(List list){
list.add("aaaa"); } public static void main(String[] args) { InterfaceProgram interfaceProgram = new InterfaceProgram(); List list = new ArrayList();//1、函数传ArrayList对象; interfaceProgram.testlist(list); List list2 = new LinkedList(); interfaceProgram.testlist(list2);//2、函数传递LinkedList对象
} } 面向接口编程有利于增加程序的灵活性
List为接口 ArrayList为实现类 这样就定义了ArrayList类
看看 thinking in java ,讲的很详细
List list = new ArrayList(); 多态的用法,ArrayListlist = new ArrayList();可以的List list = new ArrayList();一定可以。
?
就是调用接口的好处吧
例如:当你觉得ArrayList的数据结构性能不理想,
换成LinkedList的时候,只需要变动一下声明就可以了!
并不需要做更多的修改!
List list = new ArrayList();
这样的语句,而不是用
ArrayList list = new ArrayList();
后者不是更规范吗?许多程序都用前者,有何好处呢?类似的还有这样的构造:
Object ob = new Vector();
List list = new ArrayList();
这个list对象是不是可以调用所有ArrayList里的方法?而对外的接口则只考虑
List这个界面下的方法?
如果我觉得ArrayList不理想,想换成LinkedList,除了变动声明一下以外,只
需改动调用ArrayList的方法,对外接口不变,是这样的吗?
而要定义为:List list = new ArrayList();吧,这是因为ArrayList继承自List,也就是说在List中实现的方法,在ArrayList中一定得到了实现,所以当你调用一些List中的方法时时行得通的。举个例子说一下:Father是一个父类,Son是个子类,你可以这样定义:Father f = new Son();
不知道LZ是否明白了,如果还是不明白的话,就看看马士兵讲的有关java视频吧,看看就明白了。
List list=new ArrayList()
这样写的好处在于提高可扩展和可维护,并减少类中得代码量。
通俗一点就是说,同一个实现接口,使用不同的实例而且执行不同的操作。
方便扩展这样写,你可以很随意的改
List l = new LinkedList()
楼上说哪天换成linklist就是一个很好的例子;
但并不是所有情况都这样最好,如果你或许调用都是对ArrayList的操作,那不如直接就声明为ArrayList
List list = new ArrayList();
哪一天觉得使用ArrayList的数据结构不理想,想换成LinkedList,把上面
这个statement换成
List list = new LinkedList();就行了。
因为对外接口都是基于List的,而不是ArrayList中定义的方法。
那么为什么不一开始就写成
List list = new List();呢?
加大程序的灵活性
比如List list = new ArrayList();
现在要改成LinkedList
基本程序代码是不用改变的
不知楼主是否能体会这种写法带来的好处?
package com.yang.csdntest;import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;public class InterfaceProgram { public void testlist(List list){
list.add("aaaa");
}
public static void main(String[] args) {
InterfaceProgram interfaceProgram = new InterfaceProgram();
List list = new ArrayList();//1、函数传ArrayList对象;
interfaceProgram.testlist(list);
List list2 = new LinkedList();
interfaceProgram.testlist(list2);//2、函数传递LinkedList对象
}
}
面向接口编程有利于增加程序的灵活性
多态的用法,ArrayListlist = new ArrayList();可以的List list = new ArrayList();一定可以。