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
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
如果有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
如果有B继承了A,并且重载了相应参数的run方法,则会输出B!
这句创建了一个Exam对象并传递空对象调用run方法,当然打印输出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);
}
}