class point
如上面point類的資料域是可以直接被訪問的,這樣的類沒有提供封裝。如果不改變api,就無法改變它的資料表示法(比如,使用乙個比double更高精度的類來表示x和y),也無法強加任何約束條件(比如以後我們可能會希望x和y不會超過某個值)。
class pointpublic
double getx()
public
double gety()
public
void setx(double x)
public
void sety(double y)
}
使用私有域和公有訪問方法的公有類是比較合適的。在它所在的包的外部訪問時,提供訪問方法,以保留將來改變該類的內部表示法的靈活性。
如果類是包級私有的,或者是私有的巢狀類,那麼直接暴露它的資料域並沒有錯誤。對於包級私有類,這些**被限定在包含該類的包中,如果有必要,不改變包之外的任何**而只改變內部資料表示法也是可以的;對於私有巢狀類,改變的作用範圍限定在外圍類中。
讓公有類暴露域不是好辦法,但如果域是不可變的,這種做法的危害會較小:
public final classtime
}
總結:公有類永遠都不應該暴露可變的域,讓公有域暴露不可變域的危害較小(可以強加約束條件,不能改變域表示法),有時候需要用包級私有或者私有的巢狀類來暴露域,無論這個類是可變還是不可變的。
要在公有類而非公有域中使用訪問方法
class testclass user如上這樣的類絕不應該聲名為public,因為一旦聲名為了public,該類中所有的資料就全部暴露出來,並且無法改變它的資料表示法,也無法強加任何約束條件,當被訪問的時候,無法採取任何輔助措施,這麼多問題,歸結原因就是因為如果類宣告不當,那麼可能會將整個資料域全...
第10條 在既有類中使用關聯物件存放自定義資料
本條要點 作者總結 有時需要在物件中存放相關資訊。這時我們通常從物件所屬的類中繼承乙個子類,然後改用這個子類物件。然而並非所有情況下都能這麼做,有時候類的例項可能是由某種機制所建立的,而開發者無法令這種機制建立出自己所寫的子類例項。objective c 中有一項強大的特性可以解決此問題,這就是 關...
在ASP中使用類
vbscript5中增加了許多新功能,最振奮人心的當屬類和正規表示式的出現。以下是本人寫的乙個解析html 的類。我是 學php的,語法有不習慣的地方,請大家多包含。class htmlparse 設定 initialize 事件。private sub class initialize myglo...