在进行Java编程中经常用到以下类似的代码,

List<String> strs = new ArrayList<String>();

只知这是多态,像是一种规范而不知为何如此。

  编程时针对超类型(父类)进行编程,也就是说变量的声明类型(或方法的返回类型)是超类型,而不是具体的某个子类。超类型中的各个方法的具体实现不在超类型中,而是在各个子类中。这样在程序执行时可以根据实际状况执行到真正的(某个子类)行为。这样带来的好处是,我们在声明一个变量时无需关心以后执行时的真正的数据类型是哪种(某个子类类型),这是种解耦合(松耦合)的思想。我们之后维护的时候可以随时将声明的变量替换为真正需要要执行的类型,假如在上述代码中当想要换用LinkedList来实现这个功能的时候,其它的代码都不用改,只须要改这一行,因为接口里声明了子类所共有的方法。具有很高的可维护性和可扩展性。所以其实我们还可以换个说法:“针对超类型编程”,超类型则通常是接口或是一个抽象类。

  其实,这便是针对(面向)接口编程(Interface-Oriented Programming),这种设计方式将设计与实现分离。在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了,而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。

更具体的解释参考:http://toyota2006.iteye.com/blog/25232?yyue=a21bo.50862.201879