本帖最后由 梁俊 于 2013-1-25 10:12 编辑
- public class Test7 {
- public static void main(String[] args) {
- A a1 = new A();
- A a2 = new B();
- B b = new B();
- C c = new C();
- D d = new D();
- //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)函数
- }
- }
- class A {
- public String show(D obj){
- return ("A and D");
- }
- public String show(A obj){
- return ("A and A");
- }
- }
- class B extends A{
- public String show(B obj){
- return ("B and B");
- }
- public String show(A obj){
- return ("B and A");
- }
- }
- class C extends B{}
- class D extends B{}
复制代码 |