標籤:
package duotai;class A{public String show(){return "A";}}class B extends A{public String show(){return "B";}public String onlyB(){return "onlyB";}}class C extends B{public String show(){return "C";}public String onlyC(){return "onlyC";}}class D{public String show(String item){return "D+"+item;}public int show(int item){return item;}}public class Main { public static void main(String[] args) {A a = new A();B b = new B();C c = new C();A ab = new B(); A ac = new C();B bc =new C();/* * B是A的子類,C是B的子類,A中有方法show(),B和C都對其進行了重寫。 * 重寫是父類與子類多態性的表現,子類的對象調用該方法將調用子類中的定義的此方法,父類中的此方法被屏蔽。 * 1,2,3分別為A,B,C的對象調用該方法,所以返回結果分別為A,B,C * *///1System.out.println("1:a.show()="+a.show()); //輸出:1:a.show()=A//2System.out.println("2:b.show()="+b.show()); //輸出:2:a.show()=B//3System.out.println("3:c.show()="+c.show()); //輸出:3:a.show()=C/* * 當超類通過聲明的引用變數(稱其為“對象的引用”其實更合適)調用其子類的對象時,它調用的方法必須是超類中擁有的子類的方法。 * 4中變數ab是由A聲明的,引用了B的對象,所以ab.show()調用的是B類中的show()方法;但是如果使用ab變數調用onlyB() * 是調不到的,因為超類中沒有該方法。 * 5,6同4 * *///4 System.out.println("4:ab.show()="+ab.show()); //輸出:4:ab.show()=B //5 System.out.println("5:ac.show()="+ac.show()); //輸出:5:ac.show()=C //6 System.out.println("6:bc.show()="+bc.show()); //輸出:6:bc.show()=C /* * 在D中有兩個show方法,但它們的參數和傳回值不同,這是方法的重載。 * 重載是一個類中多態性的一種表現,方法名相同,但參數的個數、類型,傳回值至少有一個不同。 * */ D d =new D(); //7 System.out.println("7:d.show(itemStr)="+d.show("dd")); //7:d.show(itemStr)=D+dd //8 System.out.println("8:d.show(itemInt)="+d.show(1)); //8:d.show(itemInt)=1} }
鞏固java(五)----通過執行個體理解java多態