self、super、封裝、繼承、多態(tài)
self
self用于調(diào)用本類中的方法
前提: self不能離開類, 離開類之后沒有任何意義
-
含義:
- 如果self在對象方法中, 那么self就代表調(diào)用當(dāng)前對象方法的那個(gè)對象
- 如果self在類方法中, 那么self就代表調(diào)用當(dāng)前類方法的那個(gè)類
總結(jié): 只用關(guān)注self在哪一個(gè)方法中 , 如果在類方法那么就代表當(dāng)前類, 如果在對象方法那么就代表"當(dāng)前調(diào)用該方法的對象"
-
注意:
- self會(huì)自動(dòng)區(qū)分類方法和對象方法, 如果在類方法中使用self調(diào)用對象方法, 那么會(huì)直接報(bào)錯(cuò)
- 不能在對象方法或者類方法中利用self調(diào)用當(dāng)前self所在的方法(會(huì)發(fā)生死循環(huán))
-
使用場景:
- 可以用于在對象方法之間進(jìn)行相互調(diào)用
- 可以用于在類方法之間進(jìn)行相互調(diào)用
- 可以用于區(qū)分成員變量和局部變量同名的情況
super
super用于調(diào)用父類中的方法
使用方法: 只需要利用super給父類的方法發(fā)送一個(gè)消息, 那么系統(tǒng)就會(huì)自動(dòng)調(diào)用父類的方法
-
使用場景:
- 如果以后想在子類中調(diào)用父類的方法可以使用super
- 如果想在給父類方法進(jìn)行擴(kuò)展的同時(shí)保留父類的方法, 那么可以使用super調(diào)用父類同名的方法
-
其他:
- super在類方法中, 一定會(huì)調(diào)用父類的類方法
- super在對象方法中, 一定會(huì)調(diào)用父類的對象方法
- 可以利用super在任意方法中調(diào)用父類中的方法
封裝
封裝: 屏蔽內(nèi)部實(shí)現(xiàn)的細(xì)節(jié), 僅僅對外提供共有的方法/接口(如setter, getter方法)
好處: 保證數(shù)據(jù)的安全性, 將變化隔離
規(guī)范: 一般情況下不會(huì)對外直接暴露成員變量, 都會(huì)提供一些共有的方法進(jìn)行賦值
成員變量都需要封裝起來
繼承
繼承: 當(dāng)B類繼承A類, 那么B類就擁有A類所有的屬性和方法(類方法/對象方法)
-
優(yōu)點(diǎn):
- 提高代碼的復(fù)用性
- 可以讓類與類之間產(chǎn)生關(guān)系, 正是因?yàn)槔^承讓類與類之間產(chǎn)生了關(guān)系所以才有了多態(tài)
注意: 不要因?yàn)槔^承可以提高代碼的復(fù)用性,就把含有重復(fù)代碼的多個(gè)類抽取一個(gè)父類,
只要滿足一定的條件我們才能使用繼承.條件: XXXX
是XXX / 某某某is a某某某缺點(diǎn): 耦合性太強(qiáng)(依賴性太強(qiáng), 若刪掉父類就會(huì)影響子類)
多態(tài)
多態(tài): 事物的多種表現(xiàn)形態(tài)
在程序中如何表現(xiàn): 父類指針指向子類對象
優(yōu)點(diǎn): 提高了代碼的擴(kuò)展性
注意點(diǎn): 如果父類指針指向子類對象, 如果需要調(diào)用子類特有的方法, 必須先強(qiáng)制類型轉(zhuǎn)換為子類才能調(diào)用