多态坑题

2018-09-01  本文已影响0人  迷人的酋长
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{}

class  DynamicTest
{   
    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();   
    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));   

实际上这里涉及方法调用的优先级问题,优先级由高到低依次为:

this.show()--->super.show()-->this.show((super)0)-->super.show((super)0)

    System.out.println(a1.show(b));       A and A
    System.out.println(a1.show(c));       A and A
    System.out.println(a1.show(d));       A and D

    System.out.println(a2.show(b));       B and A                                  
    System.out.println(a2.show(c));       B and A
    System.out.println(a2.show(d));       A and D
    
    System.out.println(b.show(b));        B and B
    System.out.println(b.show(c));        B and B
    System.out.println(b.show(d));        A and D
上一篇下一篇

猜你喜欢

热点阅读