日期:2014-05-20  浏览次数:20697 次

请帮我分析一下这段代码,谢谢!
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