请帮我分析一下这段代码,谢谢!
class A{
}
public class Exam{
public void run(Object o){
System.out.println("Object");
}
public void run(A a){
System.out.println("A");
}
public static void main(String[] args){
new Exam().run(null);
}
}
请问运行结果为什么是:A
------解决方案--------------------因为A继承了Object,从更小的开始执行!
如果有B继承了A,并且重载了相应参数的run方法,则会输出B!
------解决方案--------------------论坛以前有这个问题:
因为A继承自Object编译器从范围小的开始匹配。如果你改成:
class A{
}
class B extends A{
}
public class T{
public void run(Object o){
System.out.println("Object");
}
public void run(A a){
System.out.println("A");
}
public void run(B b){
System.out.println("B");
}
public static void main(String[] args){
new T().run(null);
}
}
结果将是B