本帖最后由 梁俊 于 2013-1-25 10:14 编辑
//a1有两个方法show(D obj),show(A obj)
System.out.println(a1.show(b)); //A类没有带B的参数,B继承自A,所以调用A类的show(A obj)函数
System.out.println(a1.show(c)); //B类没有带C的参数,C继承自B,A类没有带B的参数,B继承自A,所以调用A类的show(A obj)函数
System.out.println(a1.show(d)); //A类有带D的参数,所以调用A类的show(D obj)函数
//a2有两个方法show(D obj),所以调用B类的show(A obj)方法,输出为B and A
//show(A obj)方法覆盖父类方法,所以调用Blei
System.out.println(a2.show(b)); //a2没有带B的参数,B继承自A,所以调用B类的show(A obj)函数
System.out.println(a2.show(c)); //a2没有带C的参数,C继承自B,B类没有带B的参数,B继承自A,所以调用B类的show(A obj)函数
System.out.println(a2.show(d)); //a2有带D的参数 ,所以调用B类的show(D obj)函数,也就是A类的show(D obj)函数
//b有有三个方法show(D obj),show(B obj),show(A obj)
//show(A obj)方法覆盖父类方法,所以调用B类的show(A obj)方法,输出为B and A
System.out.println(b.show(b)); //b有带B的参数,所以调用B类的show(B obj)函数
System.out.println(b.show(c)); //b没有带C的参数,C继承自B,B类有带B的参数,所以调用B类的show(B obj)函数
System.out.println(b.show(d)); //b有带D的参数 ,所以调用B类的show(D obj)函数,也就是A类的show(D obj)函数 |