覆蓋的意思是由子類重新定義繼承下來的方法以改變或延伸此方法的行為
了解繼承
在設計繼承時,你會把共同的程式**放到某個類中,然後告訴其它的類說此類是它們的父類。當某個類繼承另乙個類的時候,也就是子類繼承自父類。
(1)找出具有共同屬性和行為的物件
*用繼承來防止子類中重複出現的程式**
(2)設計代表共同狀態與行為的類
(3)決定子類是否需要某項行為(也就是方法的實現)有特定不同的運作方式
(4)通過尋找使用共同行為的子類來找出更多抽象化的機會
(5)完成類的繼承層次
*當你呼叫物件引用的方法時,你會呼叫到與該物件型別最接近的方法。換句話說,最低階的會勝出。"最低階"的意思是在層次樹的最下方。
(1)「是乙個"與"有乙個」
當乙個類繼承自另外乙個類時,我們會說這是子類去繼承父類。若你想知道某物是否應該要繼承另一物時,則可以用"is-a"測試來檢驗。
eg:三角形是乙個多邊形—is-a
澡盆是乙個浴室----has-a
(2)is-a測試適用於在繼承層次的任何地方。如果你的繼承層次樹設計得很好,那麼所有的子類都應該通過任何乙個上層父類的is-a測試。
如果類y繼承類x,且類y是類z的父類,那麼z應該能通過is-a x的測試。
*繼承概念下的is-a是個單向的關係!
子類可以繼承父類的成員。這包括了例項變數和方法。
父類可以通過訪問許可權決定子類是否能夠繼承某些特定的成員。
任一類的成員包含有自己定義出的變數和方法再加上從父類所繼承下來的任何東西。
private
default
protected
public
左邊是最受限制的,而越往右邊限制程度越小。
public 型別的成員會被繼承
private 型別的成員不會被繼承
(1)子類是extends父類出來的
(2)子類會繼承父類所有public型別的例項變數和方法,但不會繼承父類所有private型別的變數和方法。
(3)繼承下來的方法可以被覆蓋掉,但例項變數不能被覆蓋掉
(4)使用is-a測試來驗證繼承結構的合理性
(5)is-a是單方向的,河馬是動物,但動物不一定是河馬
(6)當某個方法在子類中被覆蓋過,呼叫這個方法會呼叫到覆蓋過的版本
(7)如果類y extends 類x,且類y是類z的父類,那麼z應該能通過is-a x的測試
通過繼承設計的過程你可以累計物件導向的經驗值。通過提取出一組類間共同的抽象性,你能夠排除掉重複的程式**而將這個部分放在父類中。如果有共同的部分需要修改,
就只會有乙個地方要修改,且這樣的改變會應用到所有繼承此行為的類。修改之後只需要重新編譯就行,不用修改子類。
(1)避免了重複的程式**
(2)定義出共同的協議
繼承讓你可以確保某個父型之下的所有類都會有父型所持有的全部方法,也就是說,你會通過繼承來定義相關類間的共同協議
當你定義出一組類的父型時,你可以用子型的任何類來填補任何需要或期待父型的位置。
建立物件時引用物件的型別必須相符
eg:dog mydog =
newdog()
;
多型下,引用與物件可以是不同的型別
eg:animal mydog =
newdog()
;
運用多型時,引用型別可以是實際物件型別的父類
public
class
animal
}}
引數和返回型別也可以多型
public
class
vet}
public
class
petowner
}
通過多型,你就可以編寫出引進新型子類時也不必修改的程式
(1)引數必須要一樣,且返回型別必須要相容
子類物件得保證能夠執行父類的一切
(2)不能降低方法的訪問許可權
過載的意義是兩個方法的名稱相同,但引數不同。過載與多型毫無關係。
過載版的方法只是剛好有相同名字的不同方法,它與繼承或多型無關。過載的方法與覆蓋方法不一樣。
(1)返回型別可以不同
(2)不能只改變返回型別
(3)可以更改訪問許可權
public
class
overloads
public
double
addnums
(double a,
double b)
public
void
setuniqueid
(string theid)
public
void
setuniqueid
(int ssnumber)
}
第七章 繼承與多型 對鄉村的優質生活
1.子類會繼承父類所有public型別的例項變數和方法,但不會繼承父類所有private型別的變數和方法 2.繼承下來的方法可以被覆蓋掉,但例項變數不能被覆蓋掉 3.當某個方法在子類中被覆蓋過,呼叫這個方法時會呼叫到覆蓋過的版本 4.多型下,引用和物件可以是不同的型別,即任何extends過宣告引用...
類與物件(三)繼承與多型
什麼是繼承 繼承就是可以直接使用前輩的屬性和方法。如下面的示例 定義人類 public class person public void print 定義員工類 員工類 public class employee public void print 測試類 public class test 結果 ...
swift物件導向之多型與繼承
執行時多型的要點 1.要有繼承關係的存在 2.子類要重寫父類的方法 3.父類型別的引用指向子類例項 繼承可以用於類而不能用於結構體和列舉,繼承也可用於協議 swift中不能使用多繼承,oc中也是 父類的計算屬性可以被子類所重寫,如果該計算屬性在父類中是唯讀的,則子類可以重寫該屬性使其成為唯讀或可讀可...