- 子類是extends父類出來的
- 當(dāng)調(diào)用對象引用的方法時,會調(diào)用到與該對象類型最接近的方法——最低階的會勝出
- 判斷b是否要繼承a時,可以用“是一個(isa)”法則,如果b是一個a,則可以繼承
例:三角形是一個多邊形,則三角形可以繼承多邊形
所有子類都能通過任一上層父類的isa測試
例:類Yextends類A,且類Y是類Z的父類,則ZisaX - 繼承是單向的,三角形是一個多邊形,但多邊形不是一個三角形
b繼承a意味著b可以做任何a可以做的事情(而且可能會做更多的行為) - 子類引用父類的方法后,如果要加上額外的行為,可以用super
例:publicvoidroam(){
super.roam();} - 4種存取權(quán)限,限制程度逐級減小
privatedefaultprotectedpublic
public類型的成員會被繼承
private類型的成員不會被繼承 - 繼承的使用規(guī)則
當(dāng)某個類會比其父類更具有特定意義時使用繼承
在行為程序應(yīng)該被多個相同基本類型的類所共享時 - 子類會繼承父類所有public類型的實(shí)例變量和方法
但不會繼承父類所有private類型的變量和方法 - 繼承下來的方法可以被覆蓋掉,但示例變量不能被覆蓋掉
多態(tài)
多態(tài)存在的三個前提:
A.要有繼承關(guān)系
B.子類要重寫父類的方法
C.父類引用指向子類對
多態(tài)成員訪問的特點(diǎn):
成員變量
編譯看父類,運(yùn)行看父類
成員方法
編譯看父類,運(yùn)行看子類。動態(tài)綁定
靜態(tài)方法
編譯看父類,運(yùn)行看父類。
(靜態(tài)和類相關(guān),算不上重寫,所以,訪問還是父類的)
只有非靜態(tài)的成員方法,編譯看父類,運(yùn)行看子類
- 在多態(tài)下,引用和對象可以是不同的類型——AnimalmyDog=newDog();
運(yùn)用多態(tài)時,引用類型可以是實(shí)際對象類型的父類
可以通過該方法做出多態(tài)數(shù)組
例:p186
通過多態(tài),可以編寫出引進(jìn)新型子類時也不必修改的程序 - 子類沒有層數(shù)限制,但最好少一點(diǎn)
- 防止某個類被做出子類的3個方法
A.存取控制——不標(biāo)記公有,非公有的類只能被同一個包的類做出子類
B.用final修飾符,這表示它是繼承樹的末端,不能被繼承
C.讓類只擁有private的構(gòu)造程序(constructor,第9章會說明) - final為了確保方法都是自己寫的版本時使用,可以只用final標(biāo)識方法
- 多態(tài)中子類方法覆蓋父類方法的規(guī)則
A.參數(shù)必須要一樣,且返回類型必須要兼容
B.不能降低方法的存取權(quán)限(必須相同或更為開放)
如果不遵循上述規(guī)則,使用多態(tài)調(diào)用時會調(diào)用父類的方法
重載
- 重載的意義是兩個方法的名稱相同,但參數(shù)不同。所以,重載與多態(tài)毫無關(guān)系。
- 使用規(guī)則:A.返回類型可以不同B.不能只改變返回類型C.可以更改存取權(quán)限