黑马程序员技术交流社区

标题: 面向接口编程问题 [打印本页]

作者: 李桐    时间: 2012-11-15 16:53
标题: 面向接口编程问题
本帖最后由 李桐 于 2012-11-16 16:56 编辑

刚看完张孝祥老师的交通灯管理系统,里面提到了一点面向接口编程...所以就有了下面这三个
                    ArrayList a = new ArrayList();
                Collection b = new ArrayList();
                List c = new ArrayList();

不就是一个集合么,一直分不清楚为什么写成这三样,有什么不一样,求教一下大家...

作者: ssx0101    时间: 2012-11-15 17:31
Collection是层次结构中的根接口,List是Collection的子接口,ArrayList是实现了List的类。
    ArrayList a = new ArrayList();
      Collection b = new ArrayList();
      List c = new ArrayList();
对象a、b、c、能进行的操作是不一样的。

作者: 王玮    时间: 2012-11-15 19:26
1.Collection是集合结构中的根接口
2.List是Collection的子接口
3.ArrayList是实现了List的子类。
其实这里面重要的是多态。
比如现在 你的Collection col=new ArrayList();(ArrayList的查询效率高)
但在后期因为需要,你改成了Collection col=new LinkedList();(插入删除效率高)
只需要更改具体的实现类,不需要改 与Collection col有关的代码。
这也是面向接口编程的一个大大的好处。只需要更改具体实现。





作者: 胡凤    时间: 2012-11-15 19:53
Collection是List的基接口,
list是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。
ArrayList是实现List的类,实现了可变大小的数组。
作者: 李栋梁    时间: 2012-11-15 21:01
面向接口编程有利于以后程序的扩展的,List c = new ArrayList();这句用到了多态,多态就是父类的引用指向子类

作者: 李桐    时间: 2012-11-15 21:43
那一般什么时候用什么呢
作者: 程宏志    时间: 2012-11-15 21:55
      ArrayList a = new ArrayList();
                Collection b = new ArrayList();
                List c = new ArrayList();

我没有看这相关的视频,就从这里理解, ArrayList 、 Collection 、 List 应该是三个接口,而 ArrayList();实现了这三个接口,
要是理解这个的话,我建议楼主看下抽象类继承的方法,和多态的应用,
这里你可以把接口看成抽象类的话,比较好理解。
这种格式使用了多态中的转型
父类的引用指向子类的对象!
打个比方:abstract class A{}

           class B extends B{}

那么在主函数中你可以这样建立对象使用:A a=new B();
而接口只是抽象类的一个集合,同样也可以这样使用,还有一点接口和抽象类是不能创建实例对象的,如果要使用他们,那只能通过子类来创建实例对象的
作者: 李桐    时间: 2012-11-16 15:14
我明白了 是不是面向接口的时候更加灵活一些啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2