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

解决方案 »

  1.   

    因为A继承了Object,从更小的开始执行!
    如果有B继承了A,并且重载了相应参数的run方法,则会输出B!
      

  2.   

    论坛以前有这个问题:
    因为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
      

  3.   

    因为A继承了Object,从更小的开始执行! 
    如果有B继承了A,并且重载了相应参数的run方法,则会输出B!
      

  4.   

    new Exam().run(null); 
    这句创建了一个Exam对象并传递空对象调用run方法,当然打印输出A啦
      

  5.   

    class A{}
    class B extends A{
    }
    class C extends B{
    }
    public class Exam{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 void run(C c){
    System.out.println("C");
    }
    public static void main(String[] args){
    new Exam().run(null);
    }