Zah*_*977 1 java overriding runtime
我知道重载是在编译时完成的,因为指定了参数的数量和类型,并且编译器知道对象中的哪一个方法被调用.
但是在重写为什么编译器不会看到子类是否存在于超类中?
如果编译器在编译时不知道类,那么它如何识别重载?
谢谢!
把自己放在编译器的脚下.想象一下,你必须编译以下方法:
public void foo(List<String> list) {
System.put.println(list.size());
}
Run Code Online (Sandbox Code Playgroud)
你怎么可能知道具体类型list是什么,从而size()调用该方法的具体实现方式?它是一个ArrayList吗?一个LinkedList?一个CopyOnWriteArrayList?你无法知道.
如果您还不确定,该方法的调用者可以执行类似的操作
if (Math.random() > 0.5) {
foo(new ArrayList<>());
}
else {
foo(new LinkedList<>());
}
Run Code Online (Sandbox Code Playgroud)
在编译时无法知道列表的具体类型是什么.您只能在运行时知道.因此,size()调用哪个方法只能在运行时决定.