1、问题就在于List有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。 ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处。


2、接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。
如果你是人类,则必须能吃饭。


3、在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。就像我们将一个WD的500GB硬盘换成一个希捷的1TB的硬盘,计算机其他地方不用做任何改动,而是把原硬盘拔下来、新硬盘插上就行了,因为计算机其他部分不依赖具体硬盘,而只依赖一个IDE接口,只要硬盘实现了这个接口,就可以替换上去。


4、面向接口编程可以降低程序之间的耦合度,是指在具体的调用处都是接口进行的,并不依赖于具体类

从使用“List list = new ArrayList()”而不是“ArrayList list = new ArrayList()”看面向接口编程相关推荐

  1. Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())

    一般想知道List 与ArrayList 的区别可能大部分都是看到了 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayLis ...

  2. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...

    ArrayList和Vector的区别 ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的. ...

  3. java arraylist 合并_在Java中将两个arrayList合并到一个新的arrayList中,没有重复且没有顺序...

    我试图"合并"两个arrayList,产生一个新的arrayList,其中包含两个组合arrayLists中的所有数字,但没有任何重复的元素,它们应该是有序的.我想出了下面的这段代 ...

  4. arraylist删除指定元素_揭开ArrayList的外衣看本质

    揭开ArrayList的外衣,看本质​mp.weixin.qq.com 源码还是比较多的,安安静静的读完确实不易,所以我们读源码要有着重点. ArrayList的继承和实现关系 ArrayList的成 ...

  5. 设计原则 —— 针对接口编程而不针对实现编程

    对"针对接口编程,而不是针对实现编程"的理解 应该针对接口编程 而不是针对实现编程 0. 理解 接口,定义了一堆空实现函数的接口,如下,是对其全部实现类的约束,即必须实现我(接口) ...

  6. Java ArrayList的Array,Array的ArrayList

    Today we will learn how to create a Java array of ArrayList. We will also learn how to create an Arr ...

  7. 面向接口进行开发,而不是面向实现

    深入理解软件设计原则 第 7 篇 面向接口进行开发, 而不是面向实现: 依赖于抽象类 型, 而不是具体类. 如果无需修改已有代码就能轻松对类进行扩展, 那就可以说 这样的设计是灵活的.让我们再来看一个 ...

  8. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&quo ...

  9. 对“针对接口编程,而不是针对实现编程”的理解

    对"针对接口编程,而不是针对实现编程"的理解 今天在阅读<Head First设计模式>的时候,看到了这句话:"针对接口编程,而不是针对实现编程", ...

最新文章

  1. Kafka与RabbitMQ
  2. 装鸡蛋的鞋子java代码_Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)...
  3. 【链接】调查显示:超20%美国大学生曾花学生贷款投
  4. excel怎么设置打印区域_别再浪费打印纸了!这样设置,Excel表格再大都能打印成一页!...
  5. uaa 授权_使用UAA OAuth2授权服务器–客户端和资源
  6. java入门就是死敲代码吗_JAVA入门第二季综合练习(直接思考敲的代码,面向过程,不好)...
  7. java保留二位小数_java使double保留两位小数的多方法 java保留两位小数
  8. 实验2-4-2 生成3的乘方表 (C语言)
  9. 如何突破Windows环境限制打开“命令提示符”
  10. 【poj1284-Primitive Roots】欧拉函数-奇素数的原根个数
  11. 在 Emacs 里修改现有文件的编码格式(转载)
  12. python读pdf/双层pdf
  13. Flash遮罩层初识
  14. STM32菜鸟成长记录---RS485通讯协议的应用
  15. C语言中的while循环语句的使用
  16. 关于Pearson相关性系数、Cosine相似度、欧式距离
  17. 喝酸奶八大误区[zt]
  18. PHP面试要点——MQ消息队列
  19. laravel中guard是什么
  20. TB-RK1808M0最新固件烧录和驱动更新

热门文章

  1. jupyter notebook使用技巧
  2. python 笔记:nltk (标记英文单词词性等)
  3. NTU 笔记 6422quiz 复习(1~3节)
  4. 文巾解题 596. 超过5名学生的课
  5. tableau可视化数据分析60讲(十一)-排序和过滤器
  6. 还在为快捷键烦恼吗?IntelliJ IDEA 快捷键大全 Mac 版
  7. 用python读取、处理、另存为csv文件
  8. web框架的前生今世--从servlet到spring mvc到spring boot
  9. 密码控件安全技术浅析及攻击实例
  10. Java NIO——Selector机制源码分析---转