前言:
如果说类是对一类事物的抽象,那么接口就是对一类行为的抽象,因为它只规范了一组方法的调用特征而没有给出方法的具体实现,接口是实现面向抽象编程,从而达到代码间弱耦合的重要手段之一。
接口的重要作用之一:解耦
对于程序设计来说,接口的重要意义在于它的解耦作用。在程序设计中,适当使用接口可以对不同功能的程序设计模块进行有效的隔离。也就是说,服务方代码的任何变动不会蔓延到客户方,从而使程序的可维护性变的更强,这个也是强制作用带来的结果,如下是一个接口实现代码接口(隔离)作用的示例。
- 程序的代码:
1 /** 2 * 接口 3 */ 4 public interface print { 5 public void printChar(); 6 public void printNum(); 7 } 8 9 /** 10 * 服务类 11 */ 12 class Serv implements print{ 13 public void printChar(){ 14 System.out.println("this is printChar"); 15 } 16 public void printNum(){ 17 System.out.println("this is printNum"); 18 } 19 } 20 21 /** 22 * 客户类 23 */ 24 class Client { 25 public void printClient(print s){ //以接口作为参数类型 26 s.printChar(); 27 } 28 } 29 /** 30 * 主类 31 */ 32 public class Main{ 33 public static void main(String[] args){ 34 new Client().printClient(new Serv()); 35 } 36 }
在本例子中,接口也遵循类的类型赋值兼容规则,即实现类可以被看做接口类型。那就是说,Serv类型对象可以被当做print对象来被printClient()方法所接口,这就带来了一个重要的优点,对于客户类中的printClient()方法来说,只要接口print不变,实现类Serv的代码无论怎么变都不会影响客户代码,简单点说,服务方的任何类型都不会蔓延到客户代码,即使服务方对服务进行升级时连服务类都改了,那也只需要在主类中作一个小的修改就好了。
面向接口编程的好处:
1、可以在使用类的时候更加清晰明了,更加的关注的是自己需要的功能,如下代码:
1 //以下三个实现类的定义中,使用面向接口定义的明显要比使用LinkedList定义要清晰 2 //很清楚的定义了需要的类型集合,是队列还是链表,有助于代码的阅读 3 LinkedList lis=new LinkedList(); 4 Queue que=new LinkedList(); 5 List ls=new LinkedList();
在java源代码中,LinkedList类实现了Queue接口和List接口,而队列和链表是两种概念的数据结构集合。
2、对应着不同的接口,其实现类的实例对象有着不同的方法,使程序看起来更加合理。比如实现了Queue接口时,就可以使用其中的poll()方法和offer()方法,这个方法在List接口中就没有
以上就是个人的理解