接口类型引用指向实现类对象的优点

我们在学JavaWeb,Service层经常需要使用组合的方式,用接口类型引用指向实现类对象来调用DAO层方法。

为什么要用接口引用指向实现类的对象?
下面以经常见的List<?> list= new ArrayList<?>为例,来说明这种写法的好处
这种写法其实Java多态的表现形式(一个对象在不同环境下的不同表现形式)

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

List list;是在栈区开辟一个空间放list引用,并没有创建对象所以不知道ArrayList还是LinkedList当你list= new ArrayList(); 就创建了ArrayList对象。并且把开始创建的list引用指向这个对象ArrayList和LinkedList都是List的实现类。

为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?

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


版权声明:本文为qq_43869632原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。