首頁 >後端開發 >php教程 >php物件導向的繼承性實例詳解

php物件導向的繼承性實例詳解

伊谢尔伦
伊谢尔伦原創
2017-06-30 09:16:131293瀏覽

繼承作為物件導向的三個重要特性的一個方面,在物件導向的領域有著極其重要的作用,好像沒聽說哪個物件導向的語言不支援繼承。

類別的繼承
繼承作為物件導向的三個重要特性的一個方面,在物件導向的領域有著極其重要的作用,
好像沒聽說哪個物件導向的語言不支援繼承。繼承是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."<br>"; 
} 
}

#下面我們做一個“學生類別”,如果不是用繼承如下:程式碼片段 

//定义一个“人”类做为父类 
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物件導向的繼承性實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn