java動手動腦之多型
阿新 • • 發佈:2018-11-05
1.java的語法特性:
1 public class ParentChildTest { 2 public static void main(String[] args) { 3 Parent parent=new Parent(); 4 parent.printValue();//1 5 Child child=new Child(); 6 child.printValue();//2 7 8 parent=child;//將子類賦值給父類value變為200 9 parent.printValue();//3,輸出200 10 11 parent.myValue++;//父類的value+1,對子類的value之不改變 12 parent.printValue();//4 13 14 ((Child)parent).myValue++;//先進行強制轉化變為子類型別,值不會變化,在加一201 15 parent.printValue(); 16 17 } 18 } 19 20 class Parent{ 21 public int myValue=100;//101 22 publicvoid printValue() { 23 System.out.println("Parent.printValue(),myValue="+myValue); 24 } 25 } 26 class Child extends Parent{ 27 public int myValue=200;//201 28 public void printValue() { 29 System.out.println("Child.printValue(),myValue="+myValue); 30 } 31 }
輸出顯示為:
結論:(1)子類父類要有一樣的方法才能實現這樣的賦值,子類可以賦值給父類,父類不可以賦值給子類,因為子類繼承於父類,是父類的衍生類,通俗說就是:兒子的可以是父親的,但父親的不一定是兒子的。
(2)當子類與父類有相同的方法時,讓父類變數引用一個子類物件時,以物件的型別來呼叫,這是面向物件多型的特徵的具體現。
(3)覆蓋:子類有與父類相同的方法時,要在子類中呼叫父類的物件,可以使用super關鍵字
注意:當子類被當作弗雷來使用時,通過子類訪問的欄位是父類的。