2018 3 6 物件的繼承

2022-07-17 12:03:09 字數 3259 閱讀 4942

物件繼承:

類a具有某些特徵,類

b也具有

a類的所有特徵,同時具有自己更多的一些特徵,此時發現,

b類使用

a的特徵資訊並繼續新增自己的一些特有特徵資訊。我們可以說b類繼承於a類。

class

jizuidongwu

}class human extends

jizuidongwu

}$person1 = new

human();

$person1->show1();  //$person1是human的物件,但可以執行jizuidongwu的方法

$person1->show2();

概念:繼承:乙個類從另乙個已有的類獲得屬性,稱為繼承。

派生:從乙個已有的類產生乙個新的類,稱為派生。

父類/子類:已有類為父類,新建類為子類。父類也叫「基類」,子類也叫「派生類」

單繼承:乙個類只能從乙個上級類繼承其特性資訊。php和大多數物件導向的語言都是單繼承模式。c++是多繼承。

訪問(許可權)修飾符:

在類中的成員,通常都可以在前面加上以下3個修飾符:

public:公共的,共有的,公開的

protected:受保護的

private:私有的

訪問位置:

1、private某個類的內部;

classc}

class d extendsc}

$d1 = new

d();

$d1->showinfo2();

echo "

在類外p2=" . $d1->p2;//

這一行出錯,因為在「外面」不能訪問私有成員$p2

2、protected某個類及其子類的內部;

classc}

class d extendsc}

$d1 = new

d();

$d1->showinfo2();

echo "

在類外p2=" . $d1->p2;//

這一行出錯,因為在「外面」不能訪問受保護成員$p2

3、public所有位置,內部和外部都可以使用;

classc}

class d extends c

}$d1 = new

d();

$d1->showinfo2();

echo "

在類外p2=" . $d1->p2;  //說明在類外也可以呼叫public $p2 = 2;

$d1->showinfo();

此時輸出結果為:

屬性p1=1

屬性p2=2

在類外p2=2

屬性p1=1

屬性p2=2

總結以上,訪問修飾限定符的使用範圍:

範圍本類內

繼承關係類內

類外public

可以可以

可以protected

可以可以

不可以private

可以不可以

不可以parent代表父類:

self代表「本類」;

parent通常用於在子類中呼叫父類的成員的時候使用,多數通常就是使用父類的「靜態類」成員。

class

c

function __construct($p1)}

class d extends

c

function

showme2()

}$d1 = new d(10,20); //

此時就需要尊照建構函式的引數結構來使用

$d1->showme2();

構造方法和析構方法在繼承中的表現:

子類中沒有定義構造方法時,會自動呼叫父類的構造方法。因此例項化子類時,需按照父類的構造方法的形式進行。

classc}

class d extends

c

function

showinfo()

}$d1 = new d(10, 20, 30);  //新建物件$d1

$d1->showinfo();  //呼叫方法

很多時候,在構造方法中,子類都可以通過呼叫父類的構造方法節省**,增加可讀性。

當子類定義了自己的析構方法後,則就不會自動呼叫父類的析構方法的,但可以手動呼叫:

parent::__destruct()

重寫:重寫又叫覆蓋,將從父類繼承下來的屬性或方法重新「定義」。重寫發生在父類底下的子類中。

class

jizhuidongwu

}class human extends

jizhuidongwu

}$h1 = new

human();

$h1->showme();

重寫具有一定的要求,主要就是訪問許可權以及引數。

訪問許可權方面,下級的訪問許可權應不低於上級的訪問許可權。

上級:public  下級:只能public

上級:protected  下級: protected, public

上級:private   下級:private  protected  public——實際此情況無意義。

方法的引數形式應該與父類的保持一致。

構造方法在重寫的時候引數可以不一致。

最終類final class:

最終類不會再繼續往下拓展,即這就是最底下的類,可以定義物件,不能有子類。

形式:final class 類名

最終方法 final  method:這個方法不會被下級類覆蓋。

final  function  方法名()

設計模式:解決問題的常用做法,比較好的經驗總結。針對不同問題,有不同的解決辦法,這就是不同的設計模式。

工廠模式:有時候,我們需要例項化許多類,用來得到物件。

設計乙個「工廠」(類)作用是「生產」各種物件。通常這種工廠,只需要制定類名,就可以獲取乙個該類的物件。

class

factory

else

}}$obj1 = factory::getinstance("

a");//

獲取類a的乙個物件

$obj2 = factory::getinstance("

b");//

獲取類b的乙個物件

$obj3 = factory::getinstance("

a");//

再獲取類a的乙個物件

C 繼承 5 物件切割

目錄 1.物件切割的場景 2.物件切割的避免方法 2.1使用引用 2.2使用指標 2.3使用純虛函式 c 中,乙個子類物件可以直接賦值給乙個基類物件,但是反之則不行。如下例子所示 class base class derived public base int main 物件切割發生在乙個子類物件賦...

7 物件的轉型

1 物件的向上轉型 將子類的物件賦值給父類的引用。student s new student 如學生張三 person p s 張三這個人 注意 1 乙個引用能夠呼叫哪些成員 變數和方法 取決於這個引用p裡定義了什麼成員。2 對於,子類重寫父類的方法,引用呼叫的是哪乙個方法,取決於這個引用所指向的物...

3物件的共享

作用 將當前執行緒對volatile的改變立即通知給其他執行緒 保證了volatile變數對執行緒的可見性 volatile是一種比synchronizyed稍弱的同步機制 對可見性的影響 volatile變數對可見性的影響比volatile變數本身更為重要。當執行緒a首先寫入乙個volatile變...