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()方法)