【PHP面向對象(OOP)編程入門教程】11.類的繼承


繼承作為面向對象的三個重要特性的一個方面,在面向對象的領域有着及其重要的作用,好像沒聽說哪個面向對象的語言不支持繼承。 繼承是PHP5面象對象程序設計的重要特性之一,它是指建立一個新的派生類,從一個或多個先前定義的類中繼承數據和函數,而且可以重新定義或加進新數據和 函數,從而建立了類的層次或等級。說的簡單點就是,繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可 以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。比如你現在已經有一個“人”這個類了,這個 類里面有兩個成員屬性“姓名和年齡”以及還有兩個成員方法“說話的方法和走路的方法“, 如果現在程序需要一個學生的類, 因為學生的也是人, 所以學生也有成員屬性“姓名和年齡”以及成員方法“說話的方法和走路的方法“,這個時候你就可以讓學生類來繼承人這個類, 繼承之后,學生類就會把人類里面的所有的屬性都繼承過來, 就不用你再去重新聲明一遍這些成員屬性和方法了, 因為學生類里面還有所在學校的屬性和學習的方法,所以在你做的學生類里面有繼承自人類里面的屬性和方法之外在加上學生特有的”所在學校屬性“和”學習的方 法“, 這樣一個學生類就聲明完成了, 繼函我們也可以叫作“擴展”, 從上面我們就可以看出,學生類對人類進行了擴展, 在人類里原有兩個屬性和兩個方法的基礎上加上一個屬性和一個方法擴展出來一個新的學生類。

通過繼承機制,可以利用已有的數據類型來定義新的數據類型。所定義的新的數據類型不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類以及超類。由已存在的類派生出的新類稱為派生類,又稱為子類

在軟件開發中,類的繼承性使所建立的軟件具有開放性可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重性。采用繼承性,提供了類的規范的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟件的重用性。

在C++語言中,一個派生類可以從一個基類派生,也可以從多個基類派生。從一個基類派生的繼承稱為單繼承;從多個基類派生的繼承稱為多繼承

 

但是在PHP和Java語言里面沒有多繼承,只有單繼承,也就是說,一個類只能直接從一個類中繼承數據, 這就是我們所說的單繼承。

例如:

下面是“人”類的抽象

// 定義一個“人”類做為父類
class Person {
	// 下面是人的成員屬性
	var $name;	//人的名子
	var $sex;	//人的性別
	var $age;	//人的年齡

	// 定義一個構造方法參數為屬性姓名$name、性別$sex和年齡$age進行賦值
	function __construct($name, $sex, $age) {
		$this->name = $name;
		$this->sex = $sex;
		$this->age = $age;
	}

	// 這個人可以說話的方法, 說出自己的屬性
	function say() {
		echo "我的名子叫:" . $this->name . " 性別:" . $this->sex . " 我的年齡是:" . $this->age;
	}
}

下面我們做一個“學生類”,如果不是用繼承如下:

class Student {
	// 下面是人的成員屬性
	var $name;		// 人的名字
	var $sex;		// 人的性別
	var $age;		// 人的年齡
	var $school;	// 學生所在學校的屬性

	// 定義一個構造方法參數為屬性姓名$name、性別$sex 和年齡$age 進行賦值
	function __construct($name = "", $sex = "", $age = "", $school = "") {
		$this->name = $name;
		$this->sex = $sex;
		$this->age = $age;
		$this->school = $school;
	}

	// 這個人可以說話的方法, 說出自己的屬性
	function say() {
		echo "我的名字叫:" . $this->name . " 性別:" . $this->sex . " 我的年齡是:" . $this->age . "<br />";
	}

	// 這個學生學習的方法
	function study() {
		echo "我的名字叫:" . $this->name . " 我正在" . $this->school . "學習<br />";
	}
}

定義一個子類“學生類“使用”extends”關鍵字來繼承”人”類:

class Student extends Person {
	var $school;	// 學生所在學校的屬性

	// 這個學生學習的方法
	function study() {
		echo "我的名字叫:" . $this->name . " 我正在" . $this->school . "學習<br />";
	}
}

通過上面“Student“類的定義, Student類通過使用”extends”這個關鍵字把Person 類里的所有成員屬性和成員方法都繼承過來了,並擴展了一個所在學校成員屬性”school”,和一個學習方法“study()”。現在子類”Student”里面和使用這個類實例出來的對象都具有如下的屬性和方法:

學生類”Student”里面的成員屬性有:

  • 姓名:name;
  • 年齡:age;
  • 性別:sex;
  • 學校:school;
  • 學生類”Student”里面的成員方法有:
  • 說話方法:say();
  • 學習方法:study();

通過上面類繼承的使用簡化了對象、類的創建工作量,增加了代碼的可重性。但是從上面這一個例子上中“可重用性”以及其它的繼承性所帶來的影響,我們看的還不是特別的明顯,你擴展的去想一下,人有無數個崗位,比如上面的學生還有老師、工程師、醫生、工人等,很多很多,如果

每個類都定義“人”都共同具有的屬性和方法,想一想會有很大的工作量,這些屬性和方法都可以從“Person”人類里面繼承過來。

 

延伸閱讀:PHP中類的繼承和構造函數的繼承


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM