書名:代碼本色:用編程模擬自然系統(tǒng)
作者:Daniel Shiffman
譯者:周晗彬
ISBN:978-7-115-36947-5
目錄
4.7 繼承基礎(chǔ)
1批什、泛型的動物類
??我們來看看另一個例子,這是一個由各種動物組成的世界社搅,包括:狗(dog)驻债、貓(cat)、猴子(monkey)形葬、熊貓(panda)合呐、袋熊(wombat)和水母(sea nettle)。
1)Dog類
從實現(xiàn)Dog類開始笙以,一個Dog對象有年齡變量age(整數(shù))淌实,還有eat()、sleep()和bark()函數(shù)(分別對應吃飯、睡覺和吠叫)拆祈。
class Dog{
int age;
Dog(){ 狗和貓都有相同的變量(age)和函數(shù)(eat()恨闪、sleep()
age = 0;
}
void eat() {
println("Yum!");
}
void sleep() {
println("Zzzzzz");
}
void bark() { 狗會吠叫,所以還有個特殊的bark()函數(shù)
println("WOOF!");
}
}
2)Cat類
class Cat {
int age;
Cat() {
age = 0;
}
void eat() {
println("Yum!");
}
void sleep() {
println("Zzzzzz");
}
void meow() {
println("MEOW!");
}
}
2放坏、繼承
??我們還要為魚凛剥、馬、考拉和狐猴分別寫類重寫同樣的代碼轻姿,這樣的實現(xiàn)過程難免重復而單調(diào)犁珠。
??我們應該實現(xiàn)一個泛型的動物類(Animal)用于描述各種類型的動物。所有動物都會吃和睡互亮,因此我們可以說:
- 狗是動物的一種犁享,它擁有動物的所有屬性,動物能做什么豹休,它就能做什么炊昆,除此之外,它還會吠叫威根;
- 貓是動物的一種凤巨,它擁有動物的所有屬性,動物能做什么洛搀,它就能做什么敢茁,除此之外,它還會喵喵叫留美。
??繼承讓上述需求的實現(xiàn)成為可能彰檬。
??通過繼承,類可以從其他類中繼承屬性(變量)和功能(方法)谎砾。
- Dog類是Animal類的子類逢倍,子類自動從父類中繼承所有變量和函數(shù),
除此之外景图,子類還可以有父類沒有的函數(shù)和變量较雕。 - 繼承關(guān)系符合樹形結(jié)構(gòu),就像是一棵不斷演化的“生命之樹”挚币。
比如亮蒋,狗繼承自犬類,犬類繼承自哺乳動物忘晤,而哺乳動物則繼承自動物宛蚓。
3激捏、繼承的語法
class Animal { Animal類是父類(即超類)
int age; Dog類和Cat類會繼承age變量
Animal() {
age = 0;
}
void eat() { Dog類和Cat類會繼承eat()和sleep()函數(shù)
println("Yum!");
}
void sleep() {
println("Zzzzzz");
}
}
class Dog extends Animal { "extends Animal"指Dog類是Animal類的子類
Dog() {
super(); super()函數(shù)執(zhí)行父類中的代碼
}
void bark() {
println("WOOF!"); 我們在子類中定義bark()函數(shù)设塔,因為它不是父類的一部分
}
}
class Cat extends Animal {
Cat() {
super();
}
void meow() {
println("MEOW!");
}
}
這里有兩個新關(guān)鍵字,如下。
- extends 該關(guān)鍵詞指出當前類的父類闰蛔。注意痕钢,類只能直接繼承一個父類,盡管如此序六,類的父類可以繼承其他類任连。舉個例子,狗繼承自動物例诀,梗犬則繼承自狗随抠。
繼承關(guān)系會自下而上一直延續(xù)下去。 - super() 它會調(diào)用父類的構(gòu)造函數(shù)繁涂。換句話說拱她,你在父類的構(gòu)造函數(shù)中做了什么,子類的構(gòu)造函數(shù)也會做同樣的事情扔罪。除了調(diào)用super()函數(shù)秉沼,你還可以在子類的構(gòu)造函數(shù)中進行子類專有的初始化操作。
如果父類的構(gòu)造函數(shù)帶有參數(shù)矿酵,super()函數(shù)也帶有相同的參數(shù)唬复。
4、定制
- 子類可以擁有父類沒有的功能和屬性全肮。
- 如果狗對象的進食行為和一般動物不同敞咧,
只需要在子類中重新定義eat()函數(shù),把父類中的同名函數(shù)覆蓋即可辜腺。 - 但如果狗的進食行為和普通動物一樣妄均,僅僅是多了部分功能,這時候又該怎么實現(xiàn)哪自?
子類可以調(diào)用父類的函數(shù)丰包,再加入屬于自身的定制代碼。