繼承
繼承的特點(diǎn)
- 子類,父類
- 單繼承(一個(gè)子類只有一個(gè)父類)
- 父類中private 的屬性不能被繼承
繼承的好處
- 子類擁有父類的所有屬性和方法
- 實(shí)現(xiàn)代碼的復(fù)用
繼承的語(yǔ)法
- class 子類 extends 父類{}
- 關(guān)鍵字 extends
class Dog extends Animal{
//
}
繼承的初始化順序
- 初始化superclass 再 初始化subclass
- 先初始化對(duì)象中的屬性,再執(zhí)行構(gòu)造方法中的初始化
- e.g. 當(dāng)我們創(chuàng)建一個(gè)子類對(duì)象時(shí),這其中的初始化順序是:
父類對(duì)象初始化——> 父類屬性初始化——> 父類構(gòu)造方法執(zhí)行——>子類對(duì)象初始化——>子類屬性初始化——>子類構(gòu)造方法執(zhí)行
final 關(guān)鍵字
- final 關(guān)鍵字可以修飾 類、 方法、屬性和變量
- final 修飾 class, 則該類不能被繼承
- final 修飾 method, 則該方法不能被覆蓋(重寫)override
- final 修飾 parameters, 則該類的屬性不會(huì)進(jìn)行隱式的初始化(及該屬性的初始化必須有值)或者在構(gòu)造方法中賦值(兩種只能選其一)
- final 修飾變量,則該變量只能被賦值一次,即成為一個(gè)常量
super 關(guān)鍵字
- super 關(guān)鍵字常用在對(duì)象內(nèi)部,可以用來(lái)代表父類對(duì)象
- 訪問(wèn)父類的屬性 e.g. super.age
- 訪問(wèn)父類的方法 e.g. super.eat()
- super 的應(yīng)用
-- 子類的構(gòu)造過(guò)程中必須調(diào)用父類的構(gòu)造方法
-- 如果子類的constructor中沒(méi)有顯式的調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類的無(wú)參構(gòu)造方法
-- 如果顯示的調(diào)用構(gòu)造方法,則調(diào)用語(yǔ)句必須放在子類構(gòu)造方法的第一行
-- 如果子類的構(gòu)造方法中既沒(méi)有顯示的調(diào)用父類構(gòu)造方法,而父類中也沒(méi)有無(wú)參構(gòu)造方法,則會(huì)編譯出錯(cuò)
Object 類
- Object 類是所有類的父類,如果一個(gè)類沒(méi)有用extends明確標(biāo)識(shí)繼承于哪個(gè)類,則它默認(rèn)繼承Object類
- Object 類中的方法適用于所有子類
Object類中的幾個(gè)重要方法
toString() 方法
- Object 類中的toString方法: 返回對(duì)象的哈希code碼(對(duì)象的地址字符串)
- 可以重寫toString() 方法表示出對(duì)象的屬性
code->generate
equals() 方法
- 返回值是boolean型 true or false, 所以一般可以和if語(yǔ)句配合
- 比較的是對(duì)象的引用地址是否相同(是否指向同一塊內(nèi)存地址)
- 如果要比較兩個(gè)對(duì)象的值是否相等,則可以重寫