java 面向接口编程的理解
初学者可能在学习中会有很多疑惑,为什么要这样,明明可以那样实现,这样做的好处又是什么?
可能会的人觉得很简单很容易理解,甚至可能觉得问的问题很智障,但对于小白来说可能是苦思冥想都不得其解的。
自己身为初学者也深知初学者的不易,很多问题网上没有很明确的答案。
自己遇到什么问题想出来后就写下,也为了便于后来人,毕竟前人种树后人乘凉。
初看容器时,有很多疑问,为什么都用接口作为类型去实现?(List<lnteger> l = new ArrayList<>())
而不直接这样写?(ArrayList <Integer> i = new ArrayList<>())
我说一下我这个初学者的理解,如有错误之处还望指出,不胜感谢!
这时就可以把A接口看做是一种要完成的A功能的规范,实现它的A1类是完成A功能的一种方法,A2类也是完成A功能的一种方法。
然后再我们需要实现A功能时,我们需要根据具体情况的不同,采用不同的方法去实现这个功能。
这个思想更符合我们日常面向对象的思想,先想需要完成什么功能,再想怎么完成这个功能(根据当前情况选择合适的方法去完成)。
例如我这里需要存储有序的数据,那我们先想如何实现这个功能,当然是List接口。
然后根据我当前的具体情况再想,List接口下那个类更适合当前情况。
是数组(ArrayList),还是链表(LinkedList)方式存储?
这需要结合这两种存放方式的优缺点和当前具体需求去决定。
举个更加通俗的例子:
假如我定义一个接口的功能是去图书馆,我再定义几个实现该接口的类,
有教学楼到去图书馆的类,有食堂去图书馆的类,还有寝室去图书馆的类。
然后我们思考时是先想做什么?去图书馆,这就确定了接口是去图书馆的接口。
然后我们再想怎么去,由于各个人的所在位置的不同,我们就需要根据当前所在位置的具体情况
去调用合适的类,我在寝室就用寝室去图书馆的类,我在食堂就调用食堂去图书馆的类。
假如学校扩大了,多了几个分校区。去图书馆这个接口我们不需要改动。
只需要添加一个实现了(去图书馆接口)的(分校区去图书馆的类)就可以了。(类实现接口)
这样一个具体的功能确定了,即使后来有新的情况需要完成这个功能,我们只需要添加新的类就可以了。
因为功能的确立基本是不变的,是具有普适性的。
接口是一个抽象的广泛的概念,更像是一种宏观上的东西。
先确定好宏观层面的东西(接口),然后再想微观上具体如何实现(实现该接口的类),后续有新的微观可以直接加入,因为这个微观也是从属于这个宏观的。