java继承多态方法调用测试

package lu.test;
/*
 * a1.show(b):调用的是A中show(A) 
 * a1.show(c)调用的是A中show(A)
 * a1.show(d)调用的是show(D) 正常调用本类方法。
 * a2.show(b)调用A.show(A) 方法show(B)并未被重写故调用的是父类的方法。                                                                                                                                                                                                                                                  
 * a2.show(c) 同上。
 * a2.show(d)将子类对象赋给父类引用,调用的是自父类的方法。
 * b.show(b) 调用自己的方法
 * b.show(c) 调用自己的show(B)
 * b.show(d) 调用继承自父类的方法。*/
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{}  
public class TestRelativeClass {
    public static void main(String arg[]){
    A a1 = new A();  
        A a2 = new B();  
        B b = new B();  
        C c = new C();   
        D d = new D();   
        System.out.println(a1.show(b));  
        System.out.println(a1.show(c));   
        System.out.println(a1.show(d));   
        System.out.println(a2.show(b));   
        System.out.println(a2.show(c));   
        System.out.println(a2.show(d));   
        System.out.println(b.show(b));   
        System.out.println(b.show(c));  
        System.out.println(b.show(d)); 
    }  
}

你可能感兴趣的:(java,继承,多态)