物件導向(三)三大特性

2021-09-14 00:25:58 字數 3117 閱讀 8862

訪問控制(可見性)

對屬性或方法的訪問控制,是通過在前面新增關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。

1、類屬性必須定義為公有,受保護,私有之一

受保護屬性可以被子類繼承或過載,私有屬性不能被繼承,受保護的和私有的都不能在類外部直接訪問

class myclass

}$obj = new myclass();

echo $obj->public; // 這行能被正常執行

echo $obj->protected; // 這行會產生乙個致命錯誤

echo $obj->private; // 這行也會產生乙個致命錯誤

$obj->printhello(); // 輸出 public、protected 和 private

class myclass2 extends myclass

}$obj2 = new myclass2();

echo $obj2->public; // 這行能被正常執行

echo $obj2->private; // 未定義 private

echo $obj2->protected; // 這行會產生乙個致命錯誤

$obj2->printhello(); // 輸出 public、protected2 和 undefined

2、類中的方法可以被定義為公有,私有或受保護。如果沒有設定這些關鍵字,則該方法預設為公有。

私有方法不能被繼承且不能被過載

方法中的引數前面如果有類名約束的話,引數則是該類的乙個例項

同乙個類的物件即使不是同乙個例項也可以互相訪問對方的私有與受保護成員。這是由於在這些物件的內部具體實現的細節都是已知的。

class test

private function bar()

public function baz(test $other) }

$test = new test('test');

$test->baz(new test('other'));

/*string(5) "hello"

accessed the private method.

*/

一、封裝性

封裝的原則就是要求物件以外的部分不能隨意訪問物件的內部資料(成員屬性和方法)

private、protected、public

如果不讓使用者在物件的外部設定私有屬性的值,但可以獲取私有屬性的值,或者允許使用者對私有屬性賦值,但需要限制一些賦值的條件,解決的辦法就是在物件的內部宣告一些操作私有屬性的公有方法。

二、繼承性 extends

當擴充套件乙個類,子類就會繼承父類所有公有的和受保護的方法。除非子類覆蓋了父類的方法,被繼承的方法都會保留其原有功能。

除非使用了自動載入,否則乙個類必須在使用之前被定義。如果乙個類擴充套件了另乙個,則父類必須在子類之前被宣告。此規則適用於類繼承其它類與介面。

1、繼承性就是通過子類對已存在的父類(基類)進行功能擴充套件

2、增加了**的可重用性

3、php只支援單繼承,即乙個類只能直接從另乙個類中繼承資料,但乙個類可以有多個子類

4、在子類過載的方法中呼叫父類中被覆蓋方法的功能。這樣就可以在子類重寫的方法中繼承使用父類中繼承過來並被覆蓋的方法,然後再按要求多新增一些新功能。格式是parent::方法名

5、在子類中重寫的方法的訪問許可權一定不能低於父類被覆蓋的方法的訪問許可權

三、多型性

多型最直接的定義就是讓具有繼承關係的不同類物件,可以對相同名稱的成員函式進行呼叫,產生不同的反應效果。

所謂多型性是指一段程式能夠處理多種型別物件的能力

在php中,多型性指的就是方法的重寫。方法重寫是指在乙個子類中可以重新修改父類中的某些方法,使其具有自己的特徵。重寫要求子類的方法和父類的方法名稱相同,這可以通過宣告抽象類或介面來規範。

3.1多型性的應用

我們通過計算機usb裝置的應用來介紹一下物件導向中的多型特性。目前usb設定的種類有十幾種,例如usb滑鼠、usb鍵盤、usb儲存裝置等,這些計算機的外部裝置都是通過usb介面連線計算機以後,被計算機呼叫並啟動執行的。也就是計算機正常執行的同時,每插入一種不同的usb裝置,就為計算機擴充套件一樣功能,這正是我們所說的多型特徵。那麼為什麼每個usb裝置不一樣,但都可以被計算機應用呢?那是因為每個usb裝置都要遵守計算機usb介面的開發規範,都有相同的能被計算機載入並啟用的方法,但執行各自相應的功能。這也正是我們對多型的定義。

假設我們有乙個主程式已經開發完成,需要在後期由其他開發人員為其擴充套件一些功能,但需要在不改動主程式的基礎上就可以載入這些擴充套件的功能模組,其實也就是為程式開發一些外掛程式。這就需要在主程式中為擴充套件的外掛程式寫好介面規範,每個外掛程式只有按照規範去實現自己的功能,才能被主程式應用到。

在計算機中應用usb裝置的程式設計如下所示:

//宣告乙個計算機類,去使用usb裝置

class computer

}/*定義乙個usb介面,讓每個usb裝置都遵守這個規範。也就是子類裝置必須重寫run方法,

這樣才能被計算機應用到,並按裝置自己的功能去實現它*/

inte***ce usb

//擴充套件乙個usb鍵盤裝置,實現usb介面

class ukey implements usb

}//擴充套件乙個usb滑鼠裝置,實現usb介面

class umouse implements usb

}//擴充套件乙個usb儲存裝置,實現usb介面

class ustore implements usb

}$computer = new computer;

$computer -> useusb( new ukey() );//為計算機插入乙個usb鍵盤裝置,並執行

$computer -> useusb( new umouse() );

$computer -> useusb( new ustore() );

物件導向三大特性

什麼是物件導向呢?之前我們做一件事的時候,常常是確定,先幹什麼,然後怎麼做,最後可以完事了。其實我們不妨這麼想一下,我們做事的時候是可以這樣的 這件事中涉及了什麼物件角色?如果我要把這件事做成那麼就需要物件之間是如何協作的?第二種方法,就是今天說的物件導向的方法了,好處正在慢慢體會。今天我想說的物件...

物件導向三大特性

0x00 嘮嘮叨叨 只是做乙個概念的記錄 0x01 物件導向的三大特性 n 封裝 把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。類將成員變數和成員函式封裝在類的內部,根據需要設定訪問許可權,通過成員函式管理內部狀態。n 繼承 繼承所表達的是類...

物件導向三大特性

封裝 oo將萬物都視為 物件 object 任何物件都具有特性和行為。我們將其特性稱為 成員變數 membervarible 將其行為稱之為 成員函式 member function 被封裝的特性只能通過特定的行為去訪問。好處 良好的封裝可以降低耦合度 類的內部可以自由修改 類具有對外的清晰介面。繼...