多態的兩個小例子
阿新 • • 發佈:2018-11-14
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 */ } }
多態的兩個小例子