在java中 使用面向接口编程 也就是面向抽象编程 这样程序 可扩展性更好 降低耦合 ArrayList LinkedList 都是List 的子类 就像 Set 也是Collection 的子接口 它的实现 有 hashSet linkedHashSet TreeSet 等

工作中很多时候,我们需要把很多种类的实例对象,全部扔到一个集合,这个时候我们应该寻找到一个标准,接口就是一个标准。或者可以理解:把很多种类的子类实例对象全部扔到存放父类实例的集合。

向上转型:子类对象会遗失和父类不同的方法。丢失的子类特有方法

向下转型:可以调用子类那些特有的方法,重新获得丢失的子类特有方法<泛型是常用>

第一种形式用当前类作为引用类型,那么可以访问到ArrayList这个类中的所有公用方法。第二种形式,用ArrayList实现的接口List作为引用类型,那么通过list引用可以访问到接口中定义的方法。也就是说ArrayList这个类实现了List接口,除了要必须实现接口List中声明的方法外,还可以实现额外的一些方法。但是,第二种形式就无法调用的List接口以外的方法。
使用上,设计模式中有:“代码尽量依赖于抽象,不依赖于具体”。第一种形式就是依赖具体,第二种形式就是依赖于抽象。因为List是接口。代码依赖于抽象的好处是,代码可以方便替换。例如,代码List list = new ArrayList();下面通过list来操作集合。代码编写后发现集合使用的不准确,应该使用LinkedList,那么只要修改一行代码List list = new LinkedList();就可以,这行以后的代码不需要修改,因为List接口保证了调用的都是接口中的方法,而ArrayList与LinkedList都实现了List接口。而如果当时用ArrayList list = new ArrayList()这种形式的话,那么list访问到的就可能是ArrayList里独有的方法而非List接口中的方法。这样替换成LinkedList的时候就有可能需要修改很多的代码。

如何理解:ListString list=new ArrayListString();为甚麼要声明为List 而不是ArrayListString?相关推荐

  1. 【转】掀起Azure AD的盖头来——深入理解Microsoft Graph应用程序和服务权限声明

    引子 这是一篇计划外的文章.我们都知道要进行Microsoft Graph的开发的话,需要进行应用程序注册.这个在此前我已经有专门的文章写过了.但这里存在一个小的问题:国内版的Office 365在申 ...

  2. ListString 和 ArrayListString的区别

    最近对这两个问题比较懵逼,关于List和ArrayList.List<String> list = new ArrayList<String>(); 好了,先搞明白List 和 ...

  3. (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)

    Abstract 一篇講的很中懇的文章,也道盡台灣產業的轉變. Introduction 轉貼自Mr.Firday的資訊相關科系畢業的學生,未來會是什麼樣子? 請注意:本篇文章只是試圖提出問題與一些個 ...

  4. 深入理解javascript中的立即执行函数(function(){…})()

    2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各 ...

  5. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,终于把心中的疑惑彻底解开了.现在记录下我对指针声明的理解,顺便说下如何在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  6. 理解AngularJS中的依赖注入

    作者 CraftsCoder 冷月无声 - 博客频道 - CSDN.NET http://blog.csdn.net/jaytalent/article/details/50986402 本文结合一些 ...

  7. 访问修饰符的个人理解-private与protected

    一:private                             private --只有在声明它的类或结构中访问. 例: public class A {   private string ...

  8. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LSTM详细的网络结构还是不了解,心里牵挂着难受呀!今天看了 tensorflow 文档上面推荐的这篇博文 ...

  9. c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...

    原标题:C++进阶教程系列:全面理解C++中的类 关注Linux公社 最近刷了一些题,也面试了一些公司,把关于C++中关于类的一些概念总结了一下. 在这里也反思一下,面试前信心满满自以为什么都懂,毫无 ...

最新文章

  1. Lesson 028 —— python 模块
  2. matlab画滤波器频响应,matlab如何画出“凯泽窗FIR滤波器”的幅频相频响应图
  3. (194)FPGA上电后IO的默认状态(ISE软件默认为0)
  4. 计算机主板的概念,华硕新型概念主机大爆料:内置未来主板
  5. Servlet的学习之Request请求对象(3)
  6. linux 进程意外关闭,Webdriver异常:进程意外关闭,状态为1
  7. Nginx常见问题(优化)
  8. 【Qt+ OpenGL】实现人体3D显示与控制
  9. 译文:一个采用 Three.js 的 3D 动画场景制作:飞行者
  10. Servlet和Servlet容器概念
  11. 雷军的博客分享- 这局棋,我站在人工智能这边
  12. kmp算法严蔚敏C语言,【菜鸟福音】KMP算法简单理解(从严蔚敏老师的《数据结构》出发)...
  13. ⊱人永远需要两种能力:好好说话和情绪稳定
  14. 那些怪异的量化交易策略
  15. 2020年中国人力资源科技“十大趋势”丨研报系列
  16. 小米miui系统已停止服务器,小米MIUI最新调整:这几款小米手机停止部分更新,有你的吗...
  17. centos os u盘启动盘_Mac上制作Centos7系统U盘安装盘(示例代码)
  18. 自动化测试python 成长路线_自动化测试工程师成长路线规划
  19. 计算机配置管理模块mmc无法,win7系统提示mmc无法创建管理单元怎么办
  20. 拜望德古拉伯爵——Whitby游记

热门文章

  1. 磁盘一把锁一个感叹号_电脑C盘出现一把锁和黄色感叹号是什么原因,求大神赐教。...
  2. 从零开始学Linux内核驱动--(二)简单内核模块驱动程序
  3. nokia 7 Android8,全面屏+原生安卓8.0:NOKIA 诺基亚 发布 Nokia 7 Plus 手机
  4. 无锁实现线程间共享数据
  5. (转)C++进程间和线程间通信
  6. vulnhub raven2复现
  7. 武汉工商简单校园导游系统
  8. 【历史上的今天】2 月 16 日:世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛
  9. DDR4的内存计算方法
  10. VR室内装修设计给客户不一样体验和效果