第14條 在公有類中使用訪問 方法而非公有域

2022-08-29 00:39:20 字數 750 閱讀 2111

class point

如上面point類的資料域是可以直接被訪問的,這樣的類沒有提供封裝。如果不改變api,就無法改變它的資料表示法(比如,使用乙個比double更高精度的類來表示x和y),也無法強加任何約束條件(比如以後我們可能會希望x和y不會超過某個值)。

class point 

public

double getx()

public

double gety()

public

void setx(double x)

public

void sety(double y)

}

使用私有域和公有訪問方法的公有類是比較合適的。在它所在的包的外部訪問時,提供訪問方法,以保留將來改變該類的內部表示法的靈活性。

如果類是包級私有的,或者是私有的巢狀類,那麼直接暴露它的資料域並沒有錯誤。對於包級私有類,這些**被限定在包含該類的包中,如果有必要,不改變包之外的任何**而只改變內部資料表示法也是可以的;對於私有巢狀類,改變的作用範圍限定在外圍類中。

讓公有類暴露域不是好辦法,但如果域是不可變的,這種做法的危害會較小:

public final class

time

}

總結:公有類永遠都不應該暴露可變的域,讓公有域暴露不可變域的危害較小(可以強加約束條件,不能改變域表示法),有時候需要用包級私有或者私有的巢狀類來暴露域,無論這個類是可變還是不可變的。

要在公有類而非公有域中使用訪問方法

class testclass user如上這樣的類絕不應該聲名為public,因為一旦聲名為了public,該類中所有的資料就全部暴露出來,並且無法改變它的資料表示法,也無法強加任何約束條件,當被訪問的時候,無法採取任何輔助措施,這麼多問題,歸結原因就是因為如果類宣告不當,那麼可能會將整個資料域全...

第10條 在既有類中使用關聯物件存放自定義資料

本條要點 作者總結 有時需要在物件中存放相關資訊。這時我們通常從物件所屬的類中繼承乙個子類,然後改用這個子類物件。然而並非所有情況下都能這麼做,有時候類的例項可能是由某種機制所建立的,而開發者無法令這種機制建立出自己所寫的子類例項。objective c 中有一項強大的特性可以解決此問題,這就是 關...

在ASP中使用類

vbscript5中增加了許多新功能,最振奮人心的當屬類和正規表示式的出現。以下是本人寫的乙個解析html 的類。我是 學php的,語法有不習慣的地方,請大家多包含。class htmlparse 設定 initialize 事件。private sub class initialize myglo...