public class B extends A
{
public void look(B b){
System.out.println("这就是B");
}
public void look(A a){
System.out.println("这就是A");
}
public void look(Object o){
System.out.println("这就是Object");
}
public static void main(String[] args)
{
B b = new B();
b.look(null);
b.look(b);
}
}
class A
{
}
结果是:这就是B 这就是B 为什么呢?
在这个程序中,null 可以赋值给Object和B,但是编译器会预先赋值给子类即B,所以会输出两次B,如果你再加一个C类为参数的话,编译器就会报错,因为编译器不知道赋值给B还是C,null 是一个模棱两可的类型
[plain] view plaincopy
public class B {
public void look(B b){
System.out.println("这就是B");
}
public void look(Object o){
System.out.println("这就是Object");
}
public void look(CC c){
System.out.println("这就是C");
}
public static void main(String[] args){
B b = new B();
b.look(null);//在此处报错:The method look(B) is ambiguous for the type B