我有一个关于重写方法的问题。好的,我们在这里有一个OOP,我可以理解我会得到什么结果。但是.. jdk如何解决,在每种情况下使用什么实现?
public class One {
One() {
run();
}
public void run() {
System.out.println("One");
}
}
public class Two extends One {
@Override
public void run() {
System.out.println("Two");
}
}
public class Test {
public static void main(String[] args) {
One test = new Two();
}
}
我真的很抱歉没有很好的代码清单,我很着急。已添加更改。
答案 0 :(得分:2)
首先声明类的方式是错误的,静态menthods也不参与覆盖,因为静态方法没有绑定到对象。
答案 1 :(得分:0)
Java将在vtable for Two中查找该函数。如果找不到它,它会在vtable中查找One。在这种情况下,它被找到(并直接用@Override记录),所以它被使用了。
https://stackoverflow.com/a/1543311/431415
基本上,它会从最具体到最不具体,寻找匹配的功能。