JAVA笔记

这篇博客主要讨论了在JAVA学习中遇到的关于子父类、抽象类和实现类向上转型的问题。作者通过实例解释了在LeetCode刷题时,如何发现ArrayList无法直接调用LinkedList的poll()方法。通过查看源码,了解到ArrayList作为List类型的引用,不能调用Deque接口中定义的poll()方法。总结指出,向上转型后的对象只能调用父类或接口中已定义的方法,无法访问子类特有的方法。
摘要由CSDN通过智能技术生成

JAVA学习

#关于子父类和抽象类和实现类的向上转型的问题:
在刷题Leetcode的时候,在定义具体实现类的时候,出现了这个问题:
在这里插入图片描述
问题:
他提示我对queue进行poll()方法调用的时候不可以调用;
原因:
经过查看源码解析之后
查看源码的方法:
1.control+n:然后输入想要查看的类的名称,这里想要看linkedlist的源码,所以输入linkedlist;
在这里插入图片描述
可以看到,linkedlist实现了四个接口,最主要看的是实现了List和Deque接口,然后想要看这个poll()方法究竟是在这两个抽象类中的哪一个当中;
2.分别打开进入List<>和Deque<>的源码:control+(鼠标的左键)
2.1 对于List<>:(通过 alt+7:显示List的所有方法)
list中没有poll()方法
2.2 对于Deque<>:
在这里插入图片描述
发现了poll()方法。

总结:对于接口或者实现类的向上转型的理解:
无论是对接口还是实现类,如果定义是向上转型的形式,比如
List list = new ArrayList<>(); (1)
Deque list = new ArrayList<>(); (2)
得到的list只能调用父类有的方法:一方面,如果子类有重写的父类的方法,那么此时调用的就是重写后的子类的方法;另一方面,如果子类比父类多了一些方法,由于父类本身并没有这个方法,所以list是不会有这个方法的。(在这里的体现就是,在(1)中不可以调用poll()方法,但是(2)可以调用poll()方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值