復習基礎知識
多態,就是重載和重寫.重載發生在一個類中.重寫發生在子類,意思就是子類重寫父類相同名稱的方法.剛學語言有的東西,不必搞得那麼清楚,只有知道怎麼用就行了,有的問題你要想真正把它搞得很懂,短時間是不可能的,比如說接口,沒有幾年工作經驗你根本不可能真正理解什麼是接口,甚至有的人工作四,五年也沒搞明白什麼是接口,不要花太多時間去搞這些不容易搞懂的問題.
重載的特性,方法名相同.返回類型,傳入方法的參數不同(包括個數和類型).
重寫的特性,方法名相同,返回類型,參數均相同,必須發生在子類.
1.Java語言允許某個類型的引用變量引用子類的實例,而且可以對這個引用變量進行類型轉換。
Animal animal=new Dog(); //引用變量animal引用一個Animal子類Dog的實例
Dog dog=(Dog)animal; //向下轉型,把Animal類型轉換為Dog類型
Creature creature=animal; //向上轉型,把Animal類型轉換為 Creature類型
animal=new Cat(); //引用變量animal引用另一個Animal子類Cat的實例
注:Creature這裡指的是生物。
2.如果把引用變量轉換為子類類型,稱為向下轉型,如果把引用變量轉換為父類類型,稱為向上轉型。
3.在進行引用變量的類型轉換時,會受到各種限制。而且在通過引用變量訪問它所引用的實例的靜態屬性、靜態方法、實例屬性、實例方法,以及從父類中繼承的方法和屬性時,Java虛擬機會采用不同的綁定機制。
4.成員變量、靜態方法按照引用變量聲明的類型靜態綁定;實例方法按照引用變量引用的實例動態綁定。
例如下面這段代碼:
Fathers f=new Sons(); System.out.println(“f.var=”+f.var); System.out.println(“f.staticVar=”+f.staticVar); f.method(); f.staticMethod(); 運行時將會輸出如下結果: f.var=FatherVar f.staticVar=StaticFaterVar Son method Static Father method class Fathers{ String var="FatherVar"; static String staticVar="StaticFatherVar"; void method(){System.out.println("Father method");} static void staticMethod(){System.out.println("Static Father method");} } class Sons extends Fathers{ String var="SonVar"; static String staticVar="StaticSonVar"; void method(){System.out.println("Son method");} static void staticMethod(){System.out.println("Static Son method");} String sonVar=null; void sonMethod(){} }