private 關(guān)鍵字意味著除非那個(gè)特定的類,而且從那個(gè)類的方法里,否則沒有人能訪問那個(gè)成員。同一個(gè)包
內(nèi)的其他成員不能訪問private 成員,這使其顯得似乎將類與我們自己都隔離起來。另一方面,也不能由幾
個(gè)合作的人創(chuàng)建一個(gè)包。所以private 允許我們自由地改變那個(gè)成員,同時(shí)毋需關(guān)心它是否會(huì)影響同一個(gè)包
內(nèi)的另一個(gè)類。默認(rèn)的“友好”包訪問通常已經(jīng)是一種適當(dāng)?shù)碾[藏方法;請(qǐng)記住,對(duì)于包的用戶來說,是不
能訪問一個(gè)“友好”成員的。這種效果往往能令人滿意,因?yàn)槟J(rèn)訪問是我們通常采用的方法。對(duì)于希望變
成public(公共)的成員,我們通常明確地指出,令其可由客戶程序員自由調(diào)用。而且作為一個(gè)結(jié)果,最開
始的時(shí)候通常會(huì)認(rèn)為自己不必頻繁使用private 關(guān)鍵字,因?yàn)橥耆梢栽诓挥盟那疤嵯掳l(fā)布自己的代碼
(這與C++是個(gè)鮮明的對(duì)比)。然而,隨著學(xué)習(xí)的深入,大家就會(huì)發(fā)現(xiàn)private 仍然有非常重要的用途,特
別是在涉及多線程處理的時(shí)候(詳情見第14 章)。
下面是應(yīng)用了private 的一個(gè)例子:
//: IceCream.java
// Demonstrates "private" keyword
class Sundae {
private Sundae() {}
static Sundae makeASundae() {
return new Sundae();
}
}
public class IceCream {
public static void main(String[] args) {
//! Sundae x = new Sundae();
Sundae x = Sundae.makeASundae(); 電腦知識(shí)www.boydavid.com
}
} ///:~
這個(gè)例子向我們證明了使用private 的方便:有時(shí)可能想控制對(duì)象的創(chuàng)建方式,并防止有人直接訪問一個(gè)特
定的構(gòu)建器(或者所有構(gòu)建器)。在上面的例子中,我們不可通過它的構(gòu)建器創(chuàng)建一個(gè)Sundae 對(duì)象;相反,
必須調(diào)用makeASundae()方法來實(shí)現(xiàn)(注釋③)。
③:此時(shí)還會(huì)產(chǎn)生另一個(gè)影響:由于默認(rèn)構(gòu)建器是唯一獲得定義的,而且它的屬性是private,所以可防止
對(duì)這個(gè)類的繼承.
若確定一個(gè)類只有一個(gè)“助手”方法,那么對(duì)于任何方法來說,都可以把它們?cè)O(shè)為private,從而保證自己
不會(huì)誤在包內(nèi)其他地方使用它,防止自己更改或刪除方法。將一個(gè)方法的屬性設(shè)為private 后,可保證自己
一直保持這一選項(xiàng)(然而,若一個(gè)句柄被設(shè)為private,并不表明其他對(duì)象不能擁有指向同一個(gè)對(duì)象的
public 句柄。 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|