解释很简单,尽管它并没有改变行为非常不直观的事实:
当解析要调用的方法时,编译器要做的第一件事是找到具有正确名称的方法的最小封闭范围。只有这样,其他事情才能解决,例如过载解析和游戏中的合作。
现在,这里发生的事情是,包含
toString()方法的最小封闭范围是A类,它从中继承了该方法
Object。因此,我们到此为止,不要再搜索了。可悲的是,接下来,编译器将尝试在给定范围内找到最适合该方法的方法,并注意到它无法调用任何方法,并给出错误。
这意味着 永远不要 以与Object中的方法相同的名称来静态导入方法,因为 在范围内自然存在的方法优先于静态导入
(JLS详细描述了方法阴影,但是对于这个问题,我认为要简单得多)记住那个)。
编辑@alf提交了JLS的正确部分,该部分描述了想要整个图片的人的方法调用。这相当复杂,但是问题也不是那么简单,所以这是可以预期的。



