java 面向接口编程的理解

初学者可能在学习中会有很多疑惑,为什么要这样,明明可以那样实现,这样做的好处又是什么?

可能会的人觉得很简单很容易理解,甚至可能觉得问的问题很智障,但对于小白来说可能是苦思冥想都不得其解的。

自己身为初学者也深知初学者的不易,很多问题网上没有很明确的答案。

自己遇到什么问题想出来后就写下,也为了便于后来人,毕竟前人种树后人乘凉。

 

初看容器时,有很多疑问,为什么都用接口作为类型去实现?(List<lnteger> l = new ArrayList<>())

而不直接这样写?(ArrayList <Integer> i = new ArrayList<>())

 

我说一下我这个初学者的理解,如有错误之处还望指出,不胜感谢!

 

这时就可以把A接口看做是一种要完成的A功能的规范,实现它的A1类是完成A功能的一种方法,A2类也是完成A功能的一种方法。

然后再我们需要实现A功能时,我们需要根据具体情况的不同,采用不同的方法去实现这个功能。

这个思想更符合我们日常面向对象的思想,先想需要完成什么功能,再想怎么完成这个功能(根据当前情况选择合适的方法去完成)。

 

例如我这里需要存储有序的数据,那我们先想如何实现这个功能,当然是List接口。

然后根据我当前的具体情况再想,List接口下那个类更适合当前情况。

是数组(ArrayList),还是链表(LinkedList)方式存储?

这需要结合这两种存放方式的优缺点和当前具体需求去决定。

 

举个更加通俗的例子:

假如我定义一个接口的功能是去图书馆,我再定义几个实现该接口的

有教学楼到去图书馆的,有食堂去图书馆的,还有寝室去图书馆的

然后我们思考时是先想做什么?去图书馆,这就确定了接口去图书馆接口

然后我们再想怎么去,由于各个人的所在位置的不同,我们就需要根据当前所在位置的具体情况

去调用合适的,我在寝室就用寝室去图书馆的,我在食堂就调用食堂去图书馆的

 

假如学校扩大了,多了几个分校区。去图书馆这个接口我们不需要改动。

只需要添加一个实现了(去图书馆接口)的(分校区去图书馆的类)就可以了。(类实现接口)

这样一个具体的功能确定了,即使后来有新的情况需要完成这个功能,我们只需要添加新的类就可以了。

因为功能的确立基本是不变的,是具有普适性的。

 

接口是一个抽象的广泛的概念,更像是一种宏观上的东西。

先确定好宏观层面的东西(接口),然后再想微观上具体如何实现(实现该接口的类),后续有新的微观可以直接加入,因为这个微观也是从属于这个宏观的。

posted @ 2018-09-09 16:55  gcmh  阅读(1757)  评论(0编辑  收藏  举报