物件繼承:
類a具有某些特徵,類
b也具有
a類的所有特徵,同時具有自己更多的一些特徵,此時發現,
b類使用
a的特徵資訊並繼續新增自己的一些特有特徵資訊。我們可以說b類繼承於a類。
classjizuidongwu
}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通常用於在子類中呼叫父類的成員的時候使用,多數通常就是使用父類的「靜態類」成員。
classc
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()
重寫:重寫又叫覆蓋,將從父類繼承下來的屬性或方法重新「定義」。重寫發生在父類底下的子類中。
classjizhuidongwu
}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 方法名()
設計模式:解決問題的常用做法,比較好的經驗總結。針對不同問題,有不同的解決辦法,這就是不同的設計模式。
工廠模式:有時候,我們需要例項化許多類,用來得到物件。
設計乙個「工廠」(類)作用是「生產」各種物件。通常這種工廠,只需要制定類名,就可以獲取乙個該類的物件。
classfactory
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變...