php面向?qū)ο笕ヂ?(七) 繼承性
更新時(shí)間:2009年09月30日 22:24:11 作者:
繼承作為面向?qū)ο蟮娜齻€(gè)重要特性的一個(gè)方面,在面向?qū)ο蟮念I(lǐng)域有著極其重要的作用,好像沒(méi)聽(tīng)說(shuō)哪個(gè)面向?qū)ο蟮恼Z(yǔ)言不支持繼承。
11.類(lèi)的繼承
繼承作為面向?qū)ο蟮娜齻€(gè)重要特性的一個(gè)方面,在面向?qū)ο蟮念I(lǐng)域有著極其重要的作用,
好像沒(méi)聽(tīng)說(shuō)哪個(gè)面向?qū)ο蟮恼Z(yǔ)言不支持繼承。繼承是PHP5 面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之
一,它是指建立一個(gè)新的派生類(lèi),從一個(gè)或多個(gè)先前定義的類(lèi)中繼承數(shù)據(jù)和函數(shù),而且可以
重新定義或加進(jìn)新數(shù)據(jù)和函數(shù),從而建立了類(lèi)的層次或等級(jí)。說(shuō)的簡(jiǎn)單點(diǎn)就是,繼承性是子
類(lèi)自動(dòng)共享父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類(lèi)之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類(lèi)的
時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類(lèi)所定義的內(nèi)容作為
自己的內(nèi)容,并加入若干新的內(nèi)容。比如你現(xiàn)在已經(jīng)有一個(gè)“人”這個(gè)類(lèi)了,這個(gè)類(lèi)里面有
兩個(gè)成員屬性“姓名和年齡”以及還有兩個(gè)成員方法“說(shuō)話(huà)的方法和走路的方法”,如果現(xiàn)在
程序需要一個(gè)學(xué)生的類(lèi),因?yàn)閷W(xué)生的也是人,所以學(xué)生也有成員屬性“姓名和年齡”以及成
員方法“說(shuō)話(huà)的方法和走路的方法”,這個(gè)時(shí)候你就可以讓學(xué)生類(lèi)來(lái)繼承人這個(gè)類(lèi),繼承之后,
學(xué)生類(lèi)就會(huì)把人類(lèi)里面的所有的屬性都繼承過(guò)來(lái),就不用你再去重新聲明一遍這些成員屬性
和方法了,因?yàn)閷W(xué)生類(lèi)里面還有所在學(xué)校的屬性和學(xué)習(xí)的方法,所以在你做的學(xué)生類(lèi)里面有
繼承自人類(lèi)里面的屬性和方法之外在加上學(xué)生特有的“所在學(xué)校屬性”和“學(xué)習(xí)的方法”,
這樣一個(gè)學(xué)生類(lèi)就聲明完成了,繼承我們也可以叫做“擴(kuò)展”,從上面我們就可以看出,學(xué)生
類(lèi)對(duì)人類(lèi)進(jìn)行了擴(kuò)展,在人類(lèi)里原有兩個(gè)屬性和兩個(gè)方法的基礎(chǔ)上加上一個(gè)屬性和一個(gè)方法
擴(kuò)展出來(lái)一個(gè)新的學(xué)生類(lèi)。
通過(guò)繼承機(jī)制,可以利用已有的數(shù)據(jù)類(lèi)型來(lái)定義新的數(shù)據(jù)類(lèi)型。所定義的新的數(shù)據(jù)類(lèi)型
不僅擁有新定義的成員,而且還同時(shí)擁有舊的成員。我們稱(chēng)已存在的用來(lái)派生新類(lèi)的類(lèi)為基
類(lèi),又稱(chēng)為父類(lèi)以及超類(lèi)。由已存在的類(lèi)派生出的新類(lèi)稱(chēng)為派生類(lèi),又稱(chēng)為子類(lèi)。
在軟件開(kāi)發(fā)中,類(lèi)的繼承性使所建立的軟件具有開(kāi)放性、可擴(kuò)充性,這是信息組織與分
類(lèi)的行之有效的方法,它簡(jiǎn)化了對(duì)象、類(lèi)的創(chuàng)建工作量,增加了代碼的可重性。采用繼承性,
提供了類(lèi)的規(guī)范的等級(jí)結(jié)構(gòu)。通過(guò)類(lèi)的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重
用性。
在C++語(yǔ)言中,一個(gè)派生類(lèi)可以從一個(gè)基類(lèi)派生,也可以從多個(gè)基類(lèi)派生。從一個(gè)基類(lèi)派生的繼承稱(chēng)為單繼承;從多個(gè)基類(lèi)派生的繼承稱(chēng)為多繼承。
但是在PHP 和Java 語(yǔ)言里面沒(méi)有多繼承,只有單繼承,也就是說(shuō),一個(gè)類(lèi)只能直接從
一個(gè)類(lèi)中繼承數(shù)據(jù),這就是我們所說(shuō)的單繼承。
例如:
下面是“人”類(lèi)的抽象
代碼片段
//定義一個(gè)“人”類(lèi)作為父類(lèi)
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個(gè)構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name, $sex, $age){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個(gè)人可以說(shuō)話(huà)的方法, 說(shuō)出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
}
下面我們做一個(gè)“學(xué)生類(lèi)”,如果不是用繼承如下:代碼片段
//定義一個(gè)“人”類(lèi)做為父類(lèi)
class Student{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
var $school; //學(xué)生所在學(xué)校的屬性
//定義一個(gè)構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name=””, $sex=””, $age=””, $school=””){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
$this->school=$school;
}
//這個(gè)人可以說(shuō)話(huà)的方法, 說(shuō)出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//這個(gè)學(xué)生學(xué)習(xí)的方法
function study() {
echo "我的名子叫:".$this->name." 我正在”.$this->school.”學(xué)習(xí)<br>";
}
}
//定義一個(gè)子類(lèi)“學(xué)生類(lèi)“使用”extends”關(guān)鍵字來(lái)繼承”人”類(lèi)
class Student extends Person{
var $school; //學(xué)生所在學(xué)校的屬性
//這個(gè)學(xué)生學(xué)習(xí)的方法
function study() {
echo "我的名子叫:".$this->name." 我正在”.$this->school.”學(xué)習(xí)<br>";
}
}
通過(guò)上面“Student”類(lèi)的定義,Student 類(lèi)通過(guò)使用“extends”這個(gè)關(guān)鍵字把Person 類(lèi)
里的所有成員屬性和成員方法都繼承過(guò)來(lái)了,并擴(kuò)展了一個(gè)所在學(xué)校成員屬性“school”,和
一個(gè)學(xué)習(xí)方法“study()”?,F(xiàn)在子類(lèi)“Student”里面和使用這個(gè)類(lèi)實(shí)例出來(lái)的對(duì)象都具有如下
的屬性和方法:
學(xué)生類(lèi)“Student”里面的成員屬性有:
姓名:name;
年齡:age;
性別:sex;
學(xué)校:school;
學(xué)生類(lèi)“Student”里面的成員方法有:
說(shuō)話(huà)方法:say();
學(xué)習(xí)方法:study();
通過(guò)上面類(lèi)繼承的使用簡(jiǎn)化了對(duì)象、類(lèi)的創(chuàng)建工作量,增加了代碼的可重性。但是從上
面這一個(gè)例子上中“可重用性”以及其它的繼承性所帶來(lái)的影響,我們看的還不是特別的明
顯,你擴(kuò)展的去想一下,人有無(wú)數(shù)個(gè)崗位,比如上面的學(xué)生還有老師、工程師、醫(yī)生、工人
等,很多很多,如果每個(gè)類(lèi)都定義“人”都共同具有的屬性和方法,想一想會(huì)有很大的工作
量,這些屬性和方法都可以從“Person”人類(lèi)里面繼承過(guò)來(lái)。
繼承作為面向?qū)ο蟮娜齻€(gè)重要特性的一個(gè)方面,在面向?qū)ο蟮念I(lǐng)域有著極其重要的作用,
好像沒(méi)聽(tīng)說(shuō)哪個(gè)面向?qū)ο蟮恼Z(yǔ)言不支持繼承。繼承是PHP5 面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之
一,它是指建立一個(gè)新的派生類(lèi),從一個(gè)或多個(gè)先前定義的類(lèi)中繼承數(shù)據(jù)和函數(shù),而且可以
重新定義或加進(jìn)新數(shù)據(jù)和函數(shù),從而建立了類(lèi)的層次或等級(jí)。說(shuō)的簡(jiǎn)單點(diǎn)就是,繼承性是子
類(lèi)自動(dòng)共享父類(lèi)的數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類(lèi)之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類(lèi)的
時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類(lèi)所定義的內(nèi)容作為
自己的內(nèi)容,并加入若干新的內(nèi)容。比如你現(xiàn)在已經(jīng)有一個(gè)“人”這個(gè)類(lèi)了,這個(gè)類(lèi)里面有
兩個(gè)成員屬性“姓名和年齡”以及還有兩個(gè)成員方法“說(shuō)話(huà)的方法和走路的方法”,如果現(xiàn)在
程序需要一個(gè)學(xué)生的類(lèi),因?yàn)閷W(xué)生的也是人,所以學(xué)生也有成員屬性“姓名和年齡”以及成
員方法“說(shuō)話(huà)的方法和走路的方法”,這個(gè)時(shí)候你就可以讓學(xué)生類(lèi)來(lái)繼承人這個(gè)類(lèi),繼承之后,
學(xué)生類(lèi)就會(huì)把人類(lèi)里面的所有的屬性都繼承過(guò)來(lái),就不用你再去重新聲明一遍這些成員屬性
和方法了,因?yàn)閷W(xué)生類(lèi)里面還有所在學(xué)校的屬性和學(xué)習(xí)的方法,所以在你做的學(xué)生類(lèi)里面有
繼承自人類(lèi)里面的屬性和方法之外在加上學(xué)生特有的“所在學(xué)校屬性”和“學(xué)習(xí)的方法”,
這樣一個(gè)學(xué)生類(lèi)就聲明完成了,繼承我們也可以叫做“擴(kuò)展”,從上面我們就可以看出,學(xué)生
類(lèi)對(duì)人類(lèi)進(jìn)行了擴(kuò)展,在人類(lèi)里原有兩個(gè)屬性和兩個(gè)方法的基礎(chǔ)上加上一個(gè)屬性和一個(gè)方法
擴(kuò)展出來(lái)一個(gè)新的學(xué)生類(lèi)。
通過(guò)繼承機(jī)制,可以利用已有的數(shù)據(jù)類(lèi)型來(lái)定義新的數(shù)據(jù)類(lèi)型。所定義的新的數(shù)據(jù)類(lèi)型
不僅擁有新定義的成員,而且還同時(shí)擁有舊的成員。我們稱(chēng)已存在的用來(lái)派生新類(lèi)的類(lèi)為基
類(lèi),又稱(chēng)為父類(lèi)以及超類(lèi)。由已存在的類(lèi)派生出的新類(lèi)稱(chēng)為派生類(lèi),又稱(chēng)為子類(lèi)。
在軟件開(kāi)發(fā)中,類(lèi)的繼承性使所建立的軟件具有開(kāi)放性、可擴(kuò)充性,這是信息組織與分
類(lèi)的行之有效的方法,它簡(jiǎn)化了對(duì)象、類(lèi)的創(chuàng)建工作量,增加了代碼的可重性。采用繼承性,
提供了類(lèi)的規(guī)范的等級(jí)結(jié)構(gòu)。通過(guò)類(lèi)的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重
用性。
在C++語(yǔ)言中,一個(gè)派生類(lèi)可以從一個(gè)基類(lèi)派生,也可以從多個(gè)基類(lèi)派生。從一個(gè)基類(lèi)派生的繼承稱(chēng)為單繼承;從多個(gè)基類(lèi)派生的繼承稱(chēng)為多繼承。
但是在PHP 和Java 語(yǔ)言里面沒(méi)有多繼承,只有單繼承,也就是說(shuō),一個(gè)類(lèi)只能直接從
一個(gè)類(lèi)中繼承數(shù)據(jù),這就是我們所說(shuō)的單繼承。
例如:
下面是“人”類(lèi)的抽象
代碼片段
復(fù)制代碼 代碼如下:
//定義一個(gè)“人”類(lèi)作為父類(lèi)
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個(gè)構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name, $sex, $age){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個(gè)人可以說(shuō)話(huà)的方法, 說(shuō)出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
}
下面我們做一個(gè)“學(xué)生類(lèi)”,如果不是用繼承如下:代碼片段
復(fù)制代碼 代碼如下:
//定義一個(gè)“人”類(lèi)做為父類(lèi)
class Student{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
var $school; //學(xué)生所在學(xué)校的屬性
//定義一個(gè)構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name=””, $sex=””, $age=””, $school=””){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
$this->school=$school;
}
//這個(gè)人可以說(shuō)話(huà)的方法, 說(shuō)出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//這個(gè)學(xué)生學(xué)習(xí)的方法
function study() {
echo "我的名子叫:".$this->name." 我正在”.$this->school.”學(xué)習(xí)<br>";
}
}
//定義一個(gè)子類(lèi)“學(xué)生類(lèi)“使用”extends”關(guān)鍵字來(lái)繼承”人”類(lèi)
class Student extends Person{
var $school; //學(xué)生所在學(xué)校的屬性
//這個(gè)學(xué)生學(xué)習(xí)的方法
function study() {
echo "我的名子叫:".$this->name." 我正在”.$this->school.”學(xué)習(xí)<br>";
}
}
通過(guò)上面“Student”類(lèi)的定義,Student 類(lèi)通過(guò)使用“extends”這個(gè)關(guān)鍵字把Person 類(lèi)
里的所有成員屬性和成員方法都繼承過(guò)來(lái)了,并擴(kuò)展了一個(gè)所在學(xué)校成員屬性“school”,和
一個(gè)學(xué)習(xí)方法“study()”?,F(xiàn)在子類(lèi)“Student”里面和使用這個(gè)類(lèi)實(shí)例出來(lái)的對(duì)象都具有如下
的屬性和方法:
學(xué)生類(lèi)“Student”里面的成員屬性有:
姓名:name;
年齡:age;
性別:sex;
學(xué)校:school;
學(xué)生類(lèi)“Student”里面的成員方法有:
說(shuō)話(huà)方法:say();
學(xué)習(xí)方法:study();
通過(guò)上面類(lèi)繼承的使用簡(jiǎn)化了對(duì)象、類(lèi)的創(chuàng)建工作量,增加了代碼的可重性。但是從上
面這一個(gè)例子上中“可重用性”以及其它的繼承性所帶來(lái)的影響,我們看的還不是特別的明
顯,你擴(kuò)展的去想一下,人有無(wú)數(shù)個(gè)崗位,比如上面的學(xué)生還有老師、工程師、醫(yī)生、工人
等,很多很多,如果每個(gè)類(lèi)都定義“人”都共同具有的屬性和方法,想一想會(huì)有很大的工作
量,這些屬性和方法都可以從“Person”人類(lèi)里面繼承過(guò)來(lái)。
您可能感興趣的文章:
- PHP面向?qū)ο笕筇攸c(diǎn)學(xué)習(xí)(充分理解抽象、封裝、繼承、多態(tài))
- 詳解php中的類(lèi)與對(duì)象(繼承)
- PHP入門(mén)教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類(lèi),抽象方法等)
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)高級(jí)特性詳解(接口,繼承,抽象類(lèi),析構(gòu),克隆等)
- PHP面向?qū)ο罄^承用法詳解(優(yōu)化與減少代碼重復(fù))
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)OOP繼承用法入門(mén)示例
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法簡(jiǎn)單示例
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口的繼承定義與用法詳解
- PHP學(xué)習(xí)記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ)【類(lèi)、對(duì)象、繼承等】
- PHP 對(duì)象繼承原理與簡(jiǎn)單用法示例
相關(guān)文章
動(dòng)態(tài)網(wǎng)站web開(kāi)發(fā) PHP、ASP還是ASP.NET
動(dòng)態(tài)網(wǎng)站web開(kāi)發(fā) PHP、ASP還是ASP.NET...2006-10-10怎樣在PHP中通過(guò)ADO調(diào)用Asscess數(shù)據(jù)庫(kù)和COM程序
怎樣在PHP中通過(guò)ADO調(diào)用Asscess數(shù)據(jù)庫(kù)和COM程序...2006-10-10PHP文件注釋標(biāo)記及規(guī)范小結(jié)
PHP文件注釋標(biāo)記及規(guī)范小結(jié),php開(kāi)發(fā)的朋友可以收藏下,方便以后使用,讓我們的代碼更專(zhuān)業(yè)2012-04-04