首页 > 解决方案 > java如何知道调用哪个方法?

问题描述

我是一个编程新手,并努力理解编码和编程的工作原理。

所以我正在阅读多态性和动态绑定,我想我现在明白了(我希望)但我不明白为什么

AutoClosable ac = new PrintWriter(file);

使用点运算符时显示的执行方法比使用点运算符时要少

PrintWriter pw = new PrintWriter(file);

我想在这里问的是,当实际类型是 PrintWriter 时,当我使用带有“pw”的点时,我应该获得 PrintWriter 中可用的所有方法。声明类型是什么并不重要,因为动态绑定应该根据实际类型向我显示所有方法,但这里似乎并非如此。这对我来说没有意义。

但是,如果我使用

List<String> list = new ArrayList<String>();

或者

ArrayList<String> arList = new ArrayList<String>();

然后当我使用 arList. 或列表。然后它显示所有相同的方法。这对我来说没有意义。我希望我能够让自己清楚我有什么问题/困惑。

标签: java

解决方案


它显示的方法更少,ac因为它的类型被声明为AutoCloseable而不是PrintWriter。在这种情况下,aPrintWriter被分配给它,但您可能会遇到这样的情况,即其他类的对象也被分配给它,就像这样。

AutoCloseable ac;
if (condition) ac = new PrintWriter(file);
else ac = new AutoCloseableImpl(); //where AutoCloseableImpl implements AutoCloseable

在这里,您不知道那ac一定是PrintWriter. 这就是为什么编译器只允许你访问它肯定知道的方法ac——在AutoCloseable.


推荐阅读