个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性。

面向接口编程:

一种规范约束

  • 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者)。
  • 接口本质上就是由制定者来协调实现者和调用者之间的关系。
  • 只有实现者和调用者都遵循“面向接口编程”这个准则,制定者的协调目的才能达到。
  • 接口的语义是can-do语义,表约束(Constraint)。
  • 像JDBC的规范API,不管你使用哪一套实现,我们使用的时候都是使用相同的API.

分离设计与实现

  • 使得系统可以支持开闭原则和依赖倒转原则。设计师可以设计出接口,而程序员可以依照接口去写实现。

解耦合

  • 在一定程度上解耦合,依赖接口还不依赖具体实现,在替换实现类的时候,可以将影响减到最小。

方便做单元测试

  • 在依赖接口的情况下,单元测试更容易,使用mock也更容易,在TDD中,测试驱动就是要让程序易于测试。

与设计有关

  • 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。
  • 在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;
  • 而各个对象之间的协作关系则成为系统设计的关键。
  • 在OSGI规范中,接口与实现的分离是用得最淋漓尽致的。

Spring的IoC

  • Spring将类的创建过程隐藏起来,实际上就是一个大的工厂,使得我们的代码更简洁,更易于管理和测试。

参考:

http://ask.csdn.net/questions/217447

http://blog.csdn.net/u010382560/article/details/48051355

http://www.cnblogs.com/chaohi/archive/2008/10/23/2330442.html

http://blog.csdn.net/u013400743/article/details/51252003

http://www.cnblogs.com/xyqCreator/archive/2012/11/06/2756687.html

http://blog.csdn.net/greenlihui/article/details/61916129

https://www.cnblogs.com/feng9exe/p/5588671.html

http://blog.csdn.net/jj_nan/article/details/70161086

http://blog.jobbole.com/44559/

http://blog.csdn.net/fireofjava/article/details/17527463

Java定义接口变量为接收类型有什么好处(面向接口编程)的更多相关文章

  1. 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值

    016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...

  2. JAVA定义接口格式:

    [public]interface 接口名称 [extends父接口名列表] { //静态常量 [public] [static] [final] 数据类型变量名=常量值; //抽象方法 [publi ...

  3. IT兄弟连 JavaWeb教程 Servlet中定义的变量的作用域类型

    在Java语言中,局部变量和实力变量有着不同的作用于,它们的区别如下: 局部变量在一个方法中定义,每当一个线程执行局部变量所在的方法时,在线程的堆栈中就会创建这个局部变量,当线程执行完该方法,局部变量 ...

  4. Java判断Class变量是什么类型

    public static void main(String[] args) { java.util.Date date_u = new java.util.Date(1); java.sql.Dat ...

  5. java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)

    抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...

  6. java接口中定义成员变量

    //抽象类中可以定义如下成员变量:public abstract class People { public String name; public int age; public abstract ...

  7. java中接口的定义和接口的实现

    1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interfa ...

  8. java中接口的定义与实现

    1.定义接口     使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...

  9. java定义和实现接口

    1.定义接口     使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体.当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...

随机推荐

  1. PAT Basic 1076

    1076 Wifi密码 下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请 ...

  2. Netcore 基础之TagHelper知识

    饮水思源,来自:http://www.cnblogs.com/liontone 的BLOG中关于taghelper中的内容 概要 TagHelper是ASP.NET 5的一个新特性.也许在你还没有听说 ...

  3. Scala学习-01-变量与类型

    Scala运行在jvm之上,可以调用Java类库和与Java框架交互,并将面向对象与面向函数结合在一起. 特点: 1 保留了静态类型检查.安全保障高. 2 函数式编程,更加灵活. 3 运行于jvm之上 ...

  4. WCF服务编程——数据契约快速入门

    WCF序列化流程 序列化 默认用户自定义类型(类和结构)并不支持序列化,因为.NET无法判断对象状态是否需要反射到流. 用户自定义类的实例支持序列化 需要添加[Serialazable].若要允许可序 ...

  5. 国内外移动端web适配屏幕方案总结

    基础知识点 设备像素:设备像素又称物理像素(physical pixel),设备能控制显示的最小单位,我们可以把这些像素看作成显示器上一个个的点. iPhone5的物理像素是640X1136. PS: ...

  6. day05_02 IDE介绍及设置

    notepad++比较麻烦,使用IDE工具进行程序开发 集成开发环境(IDE,Integrated Development Environment) VIM #经典的linux下的文本编辑器 Emac ...

  7. Event based Collections

    https://sourceforge.net/p/happy-guys/wiki/Event%20based%20Collections/

  8. HDU2098 分拆素数和

    Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢?   Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束.   Outp ...

  9. 【Luogu】P3806点分治模板(点分治)

    题目链接 wc听不懂lca讲的高等数学专场(一个字都听不懂),然后就自学了点分治. 点分治就是我先处理完跟根有关的东西,然后把根标记掉,把原树拆成若干个联通块,然后分别对每个联通块(每个小树)搞一模一 ...

  10. 【Luogu】P3787冰精冻西瓜(线段树)

    题目链接 我脑子怕不是有坑qwqqq 用前缀和思想,dis[i]表示i离根的距离,那么修改操作其实是对x的子树区间加y/dis[x],查询的时候*dis[to]即可. 对付/0错的思路是建森林,然而这 ...