当然你也可以 ArrayList s = new ArrayList();只是习惯这么写,ArrayList是List接口的其中一种实现, 其他还有LinkedList等等。
假设有个接口 (生物) interface 生物 {} 有个类 (人) class 人 implements 生物 还有另一个类 (猴子) class 猴子 implements 生物 那么 生物 a = new 人();的时候,a属于 生物 类,指向 人 对象(实例), 这时,可以让a重赋值为另一个猴子对象(实例),即 a = new 猴子();而如果是定义 人 a = new 人();那么a就只限定是 人 类,就不能让a重新赋值为猴子对象(实例)所以,用接口或抽象类定义变量,具有一定的灵活性
arrayList 是list接口的实现啊...
arrayList 是list接口的实现啊... 上转型啊
arrayList 是list接口的实现啊...
List只是接口,ArrayList是它的一种实现
ArrayList是List接口的实现,这个好理解
用接口new可以获得跟多的方法
因为List是接口。但是ArrayList是其中的一个实现。因此可以List s = new ArrayList(); LinkedList HashList等等都是List的一个实现而已。
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
ArrayList s = new ArrayList();只是习惯这么写,ArrayList是List接口的其中一种实现,
其他还有LinkedList等等。
interface 生物 {}
有个类 (人)
class 人 implements 生物
还有另一个类 (猴子)
class 猴子 implements 生物
那么
生物 a = new 人();的时候,a属于 生物 类,指向 人 对象(实例),
这时,可以让a重赋值为另一个猴子对象(实例),即 a = new 猴子();而如果是定义
人 a = new 人();那么a就只限定是 人 类,就不能让a重新赋值为猴子对象(实例)所以,用接口或抽象类定义变量,具有一定的灵活性
上转型啊
因为List是接口。但是ArrayList是其中的一个实现。因此可以List s = new ArrayList();
LinkedList HashList等等都是List的一个实现而已。
但是满足List规范的还有别的子类,所以当程序需要换别的实现了List规范的子类的时候就方便很多了
这么写,可扩展性好。
而List在此,就是相当于交通规则
ArrayList就相当于你遵守了规则,然后按照一条固定路线开车去了超市
那么,如果有一天,你要换路线呢?你发现一条更方便的路线,你想换,那么,只需要换Arraylist就可以了,List这个交通规则依旧需要遵守的。这么讲不知道能否明白?
当具体的实现类要替换时,直接更换,后面的代码不用改