1 class ZuFu {
}
class Fu extends ZuFu {
}
class Zi extends Fu {
public void show(ZuFu zf) {
System.out.println("祖父");
}
public void show(Zi z) {
System.out.println("儿子");
}
public void show(Fu f) {
System.out.println("父亲");
}
}
public class Test2 {
public static void main(String[] args) {
Zi z = new Zi();
z.show(null);
}
}
2 解释:
Java的重载解析过程是以两阶段运行的。第一阶段选取所有可获得并且可应用的方法或构造器。第二阶段在第一阶段选取的方法或构造器中选取最精确的一个。如果一个方法或构造器可以接受传递给另一个方法或构造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。
具体到这道题就是:show(ZuFu zf)传递的参数可以接受另两个show方法的, show(Fu f)可以接受show(Zi z)的。而show(Zi z)可以接受的参数只能是Zi的对象。所以show(Zi z)最具有精确性。 |
|