List list = new ArrayList(); 这语法太诡异了吧?求解答

List list = new ArrayList(); 这语法太诡异了吧?求解答

List list = new ArrayList(); 这语法太诡异了吧?求解答

List 是一个接口,new ArrayList的是一个类的实例化,这怎么就赋值了? 

这是一个List 和 ArrayList 默认的固定用法么? 

我知道系统中ArrayList 含有List这个接口,但是那也解释不了为什么能这么写啊,请大神帮帮忙,多谢。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
weixin_慕沐6575616 2019-04-26 20:23:57

课程里面也出现过接口类型的引用,指向实例对象,可以调用接口里定义过的重写方法和接口里的常量。

好帮手慕雪 2019-04-17 09:51:59

同学请看它们的关系

http://img1.sycdn.imooc.com//climg/5cb6867a00013dc302990265.jpg

就类似父类与子类的关系噢。祝:学习愉快

好帮手慕雪 2019-04-16 18:09:35

正常的是ArrayListlist = new ArrayList();是配套的对吧。而这里List是父亲,ArrayList是儿子。所以new ArrayList();赋值给父亲类对象也是可以的,向上转型嘛。祝:学习愉快

  • 提问者 慕移动0341649 #1
    如果两个都是类,向上转型,我能理解,可是开发手册上显示的List是一个接口啊,我现在能记住可以这么操作,但是课程中重来没提到过,觉得非常诡异啊。
    2019-04-17 09:22:36
  • 淡淡淡定o 回复 提问者 慕移动0341649 #2
    接口也可以继承的,而且我记得课程中好像讲了除了基本数据类型,万物皆对象
    2019-04-23 09:37:01
  • 冷血麒麟 回复 提问者 慕移动0341649 #3
    这是Java三大特性中的多态啊!父类引用指向子类对象啊,就是 父 父 = new 子(); List list = new ArrayList(); Set set = new HashSet(); Map map = new HashMap();等都是比较常用的写法啊!你要做Java开发的话,你会经常见到一个借口的引用指向它的实现类对象;如 Service是个接口 ,ServiceImpl是其实现类,在Controller 类中 会用 Service service = new ServiceImpl();
    2019-04-27 10:00:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师