为了账号安全,请及时绑定邮箱和手机立即绑定

Java集合框架中的多态

Java集合框架中的多态

MMMHUHU 2019-03-22 14:15:50
如何理解这三种定义方式Collection arr1 = new ArrayList();List       arr2 = new ArrayList();ArrayList  arr3 = new ArrayList();
查看完整描述

4 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

更新回答:
其实不是三种情况,是两种情况。
我给你举个实际开发中经常碰到的场景的例子,你就明白为什么“我们经常要把一个对象转型成它的父类或接口来使用了”。

通常我们在使用列表的时候都是这样写的:

List list = new ArrayList();

而不是

ArrayList list = new ArrayList();

第一种为什么比第二种好?

假设你用了二种方式声明一个列表,然后被其他人引用了(或者被你自己在其他地方用了)。

突然有一天,你发现用ArrayList不好,需要换成LinkedList,那么你肯定要把声明改成:

LinkedList list = new LinkedList();

这样以来,用到你的list的地方都得更改类型声明。更重要的是,用到你的list的人,他们写自己的代码的时候是基于“你的这个list是一个ArrayList ”这样的前提来写的,你突然把它改成了LinkedList,很可能导致他们的程序出错或者需要重写。

但是如果你一开始就用第一种声明方式,就不会有这个问题。你随时可以更换list的,引用你的list的其他人或其他地方不需要任何修改。例如:

List list = new LinkedList();

所以说,当你声明一个变量的时候,把它的类型声明得越笼统越好,越具体越糟糕。前者对修改是友好的,后者对修改不友好。

类似的,确定一个方法的可访问性(即public、protected、默认的、private)时,在可能的情况下,越小越好。


查看完整回答
反对 回复 2019-04-16
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

这个是父类引用子类对象,即是向上转型,是多态的必要条件之一


查看完整回答
反对 回复 2019-04-16
?
心有法竹

TA贡献1866条经验 获得超5个赞

ArrayList实现了List接口,因此ArrayList肯定是List类型,同理List实现了Collection接口,因此List肯定是Collection类型。也可以理解为ArrayList的向上转型。


查看完整回答
反对 回复 2019-04-16
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

父类引用指向子类对象


查看完整回答
反对 回复 2019-04-16
  • 4 回答
  • 0 关注
  • 491 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号