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

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

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

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

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

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

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

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

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

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

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

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

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

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

举个更加通俗的例子:

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. iOS使用textfield注意的细节
  2. Response.End()在Webform和ASP.NET MVC下的表现差异
  3. Paths on a Grid(poj 1942)
  4. HDU 4708:Rotation Lock Puzzle
  5. jmeter随笔(3)-从csv中获取带引号的数据详情
  6. Ajax实现的长轮询不阻塞同一时间内页面的其他Ajax请求(同域请求)
  7. 最新版SDWebImage的使用
  8. C语言之数组
  9. RHCE认证过程
  10. iOS下WebRTC音视频通话(三)-音视频通话
  11. JavaScript学习一之数据校验
  12. windows 查看端口占用、关闭端口
  13. 学习Python第七天
  14. 深入理解JVM(二)——内存模型、可见性、指令重排序
  15. MongoDb 配置笔记
  16. ef join查询
  17. OSI七层协议概念详解
  18. CF1119 Global Round 2
  19. 0065 MyBatis一级缓存与二级缓存
  20. centos7 修改主机名(hostnamectl)

热门文章

  1. POJ2492:A Bug&#39;s Life(种类并查集)
  2. [POI2014] KUR-Couriers(洛谷P3567)
  3. bzoj 3190 维护栈
  4. es查询与聚合
  5. appium===Python+Appium环境部署教程
  6. k8s的Dashboard
  7. Asp.Net MVC在过滤器中使用模型绑定
  8. ajaxfileupload异步上传文件
  9. React Native - 0序言
  10. tomcat并发优化