PHP 類(lèi)覆蓋(Override)重寫(xiě)和最終類(lèi)、最終方法
1. 含義: 一個(gè)子類(lèi)繼承了父類(lèi)的特征信息(私有的繼承不了),但又自己來(lái)重新定義父類(lèi)繼承給自己的特征信息,這種現(xiàn)象就稱(chēng)為"覆蓋"(重寫(xiě))——override。示例一: 子類(lèi)使用父類(lèi)的顯示信息方法2.
1. 含義: 一個(gè)子類(lèi)繼承了父類(lèi)的特征信息(私有的繼承不了),但又自己來(lái)重新定義父類(lèi)繼承給自己的特征信息,這種現(xiàn)象就稱(chēng)為"覆蓋"(重寫(xiě))——override。
示例一: 子類(lèi)使用父類(lèi)的顯示信息方法
2. 先考察一個(gè)下級(jí)使用上級(jí)類(lèi)顯示信息而不"完全"的例子:
示例二: 子類(lèi)重寫(xiě)父類(lèi)的顯示信息方法
3. 于是,我們?cè)谧宇?lèi)中,"親自"來(lái)定義一個(gè)顯示信息的方法,該方法跟父類(lèi)的方法同名:(同名的目的可以認(rèn)為"做同樣的事情"):
重寫(xiě)的基本要求
4. 該代碼明顯有2行是跟父類(lèi)的同名方法所做的事情是一樣的,則改進(jìn)如下:
- 訪問(wèn)控制權(quán)限: 下級(jí)類(lèi)重寫(xiě)上級(jí)類(lèi)的同名屬性或方法時(shí),所使用的訪問(wèn)控制修飾符"不能更狹小",即:
- 上級(jí)是 public,下級(jí)只能是 public
- 上級(jí)是 protected,下級(jí)只能是 protected 和 public
- 上級(jí)是 private,下級(jí): 此時(shí)覆蓋不了
- 方法覆蓋時(shí),下級(jí)方法的參數(shù)要求跟上級(jí)方法的參數(shù)"一致"
- 特例: 構(gòu)造方法也可以重寫(xiě),但此時(shí)不要求參數(shù)一致
- 私有屬性和私有方法的重寫(xiě)問(wèn)題:
- 私有屬性和方法都不能覆蓋,但其實(shí)子類(lèi)可以定義跟父類(lèi)私有的同名屬性或方法。只是當(dāng)作一個(gè)自身的新的屬性或方法來(lái)看待而已
PHP 中的最終類(lèi)和最終方法
父類(lèi)中被 final 修飾的類(lèi)或方法,是不能被子類(lèi)所覆蓋的。也就是說(shuō),這些被 final 修飾的類(lèi)或方法是"最終的",子類(lèi)無(wú)法對(duì)其進(jìn)行重寫(xiě)。
綜上所述,PHP 中類(lèi)的覆蓋重寫(xiě)以及最終類(lèi)、最終方法的概念對(duì)于面向?qū)ο缶幊逃兄匾囊饬x。合理地使用這些特性可以讓程序更加靈活、可擴(kuò)展和安全。