1. 程式人生 > >多態的兩個小例子

多態的兩個小例子

getclass ava stat new 隱式 static return 應該 多態

class A {
    public String show(B 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");
    }
}
public class Test2 {
    public static void main(String[] args) {
        A a2 = new B();  
        System.out.println(a2.show(a2));//輸出B and A
        System.out.println(a2.getClass().getTypeName());//輸出cn.bh.tt.B
        /*總結:1.當A new出子類a2,a2的類型是B,所以調用show()方法時,會先在子類B裏面找,
         * 如果找不到再去父類A裏面找。
         * 2.最有意思的是a2調用了show(A obj)而不是show(B obj),應該是因為a2是由A new出來的所以在充當
         * 參數的時候會向上轉型為A。
         * */
    }
}
class A{
    public int i=7;//父類屬性 i
    public A(){    //父類無參構造器
        print();
    }              //父類方法print()
    public void print(){ 
        System.out.print(i);
        System.out.println("父類方法");
    }
}
public class Polymorphic2 extends A{
    public int j=4;       //子類屬性 j
    public Polymorphic2(){ //子類無參構造器
        print();
    }
    public void print(){  //子類方法print
        System.out.println(j);
        System.out.println("子類方法");
    }
    public static void main(String[] args){
        new Polymorphic2();
        /*輸出為0<br>4:子類先默認隱式調用父類構造器,由於print被子類重寫,所以調用子類方法,但此時j是還沒有初始化的,所以輸出為0
        */
    }
}

多態的兩個小例子