java多态

重载Overloading是一个类中多态性的一种表现;
重写Overriding是父类与子类之间多态性的一种表现。

重载和重写时,方法调用顺序的规则:
1 首先是看调用顺序:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)、this.show(super((super)O))、super.show(super((super)O))。。。。。。直到找到符合的方法。

例:

类A
类B extend A
A a1 = new A();//this为A
A a2 = new B();//this为A
2 最后看子类有没有覆盖这个方法,如果子类重写了这个方法,则调用的是子类的。

例子:

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 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("1- "+a1.show(b));   
        System.out.println("2- "+a1.show(c));    
        System.out.println("3- "+a1.show(d));    
        System.out.println("4- "+a2.show(b));   
        System.out.println("5- "+a2.show(c));
        System.out.println("6- "+a2.show(d));    
        System.out.println("7- "+b.show(b));    
        System.out.println("8- "+b.show(c));     
        System.out.println("9- "+b.show(d)); 
        System.out.println("10- "+a2.show(a1)); 
        System.out.println("11- "+a1.show(c)); 
        System.out.println("12- "+a1.show(d)); 
    }
View Code

答案:

1- A and A
2- A and A
3- A and D
4- B and A
5- B and A
6- A and D
7- B and B
8- B and B
9- A and D
10- B and A
11- A and A
12- A and D

原文地址:https://www.cnblogs.com/chrono/p/4031778.html