1、了解繼承的定義
2、掌握繼承的好處
我們仔細看上面一張圖,然後做一件事情,找出他們的共同點
共同點:
1、都擁有部分相同的屬性和方法
2、他們都是人
按照正常類的定義走,我們要實現以上2個類,我們得分別定義NBA球員這個類的所有屬性和方法,然後定義女主播類的時候,還得寫一遍重複的姓名,身高,體重等屬性和吃飯的方法,如果又有一個類比如叫學生,那意味著這些共同的屬性和共同的方法又得重複寫一遍,以此類推,程式碼會有很多地方類似,這樣增加的程式碼的冗餘性,所以為了解決這種冗餘性,為了讓程式碼更簡潔,可重用性高,我們可以把這些共同的屬性和方法都寫到一塊去,然後讓每個類都去呼叫這個公共的屬性和方法,這樣維護起來是不是就更加方便了,而且程式碼也更加簡潔了,那麼這種做法我們就叫做繼承
具體怎麼做的呢,如下圖
我們先建立了一個「人「的類,讓這個人都具有2個類都有的屬性和方法,再讓NBA球員和女主播都繼承 「人」 這個類
概念:被繼承的類叫父類別,比如人,繼承的類叫子類
總結:什麼是繼承,繼承是一種方法,用來提高程式碼的可重用性和減少程式碼的冗餘性,就像現實生活中的遺傳一樣,子女都會繼承父母的部分基因,所以你一生下來你就是有人類的共同屬性和行為
1、提高程式碼的重用性,節約了程式設計的時間和代價
父類別中定義的屬性和方法就不需要子類中重複定義,子類只要繼承了父類別,就擁有了父類別中所有的屬性和方法
2、對於同一個父類別下的所有子類,呼叫他們的時候可以一視同仁
比如不管是NBA球員還是女主播,因為他們都是人,所以我們呼叫他們的時候可以直接呼叫父類別的方法,比如吃飯,而不用管這個類到底是NBA球員還是女主播
3、子類可以修改調整父類別定義的類成員
a、我們稱為重寫(Overwrite)
b、一旦子類修改好了,就按照子類定義的方法執行
這相當於變異
學習任何東西我們既要知道其理論,還要有相關的理論實踐,其實所有的理論都是實踐得出來的,所以有的時候我一再強調,理論雖然很抽象,但是大家有了一定的實踐經驗後也要進行總結,總結一些言簡意賅,通俗易懂的「理論」,這個習慣培養好了以後,我相信很多知識大家能夠了解的更加透徹,同時更容易抓住事情的本質,這樣分析問題的能力也會得到提升。
好了,既然要理論和實踐相結合,那麼接下來,我們通過程式碼進行實操演示,看看在程式碼中具體是怎麼實現繼承的
<?php /*** * 案例目標 * 1.掌握繼承的定義 2.掌握繼承的好處 */ //定義一個「人」類 class Human{ public $name = "";//姓名 public $height = "";//身高 public $weight = "";//體重 public function eat($food){ echo $this->name."在吃".$food."<br/>"; } } //女主播 class Anchors extends Human{ public $name = ""; public $stageName = ""; public function __construct( $name,$stageName ){ $this->name = $name; $this->stageName = $stageName; } public function singing(){ echo "我是女主播,我會唱歌<br/>"; } //重寫方法eat public function eat($food){ echo "我是女主播,我是邊唱歌邊吃{$food}<br/>"; } } //Nba球員類 class NbaPlayer extends Human{ //因為父類別已經有了,所以就不需要再寫了,通過extends來實現 // public $name = "";//姓名 // public $height = "";//身高 // public $weight = "";//體重 public $team = "";//團隊 public $playerName = "";//球員號碼 public function __construct( $name,$height,$weight,$team,$playerName ){ $this->name = $name; $this->height=$height; $this->weight = $weight; $this->team = $team; $this->playName = $playerName; echo "建構函式執行了,當前物件是{$this->name}<br/>"; } //跑步 public function run(){ echo "跑步中<br/>"; } //跳躍 public function jump(){ echo "跳躍<br/>"; } //運球 public function dribble(){ echo "運球<br/>"; } //傳球 public function pass(){ echo "傳球<br/>"; } //投籃 public function shoot(){ echo "投籃<br/>"; } //扣籃 public function dunk(){ echo "扣籃<br/>"; } //重寫方法eat ,只要名稱和父類別一樣就是代表重寫了不一定引數也要保持一樣 public function eat($food){ echo "我是Nba球員,我是站著吃飯,邊吃{$food}邊看球賽<br/>"; } } //測試,NBA球員,沒有直接定義name,身高,體重,現在輸出一下看結果有沒有 //建立喬丹物件 $jordon = new NbaPlayer("喬丹","1.98米","98公斤","公牛","23"); //輸出喬丹物件 echo "名稱= ".$jordon->name."<br/>"; //測試,NBA球員,沒有直接定義eat方法,現在輸出一下看結果有沒有 echo $jordon->eat("蘋果"); //證明第二個好處,只要是個人就可以呼叫它的eat方法 $linda = new Anchors("琳達","LD"); echo $linda->eat("蘋果"); //測試第三個好處是否真實 //思路1.為女主播和NBA球員2個類分別重寫eat方法 // 2.再次執行2個物件的eat方法 // 會發現一旦子類重寫了父類別的方法,那麼就會呼叫子類自己的方法了,這裡就大家自己寫下,因為上面我已經呼叫了eat方法,一旦重寫了,上面的結果會變 ?>
通過上述程式碼的演示,我們總結一下:
1、extends 就是繼承,通過這個關鍵字可以實現子類繼承父類別,共用父類別的所有屬性和方法
2、繼承程式碼的其他特點:
● 在子類建構函式中也可以直接通過$this->來存取
● 在php中extends 後面只能繼承一個類,不能用,來實現繼承多個類,否則會報錯
總結:
本文其實目標只有2個,知道繼承的定義和好處,最後我們通過程式碼相信對繼承的好處有了更深的體會和理解
以上就是PHP中物件導向之繼承的詳細內容,更多請關注TW511.COM其它相關文章!