在 封裝物件內部資料 的CashCard
類別是定義在cc.openhome
套件中,假設現在為了管理上的需求,你要將CashCard
類別定義至cc.openhome.virtual
套件中,除了原始碼與位元碼的資料夾需求必須符合套件階層之外,原始碼內容也得作些修改:
package cc.openhome.virtual;
class CashCard {
...
}
這一改可不得了,你發現使用到CashCard
的程式碼都出錯了:
宣告為
private
的成員表示為類別私有,使用者無法在其它類別的程式碼中直接存取。如果沒有宣告權限修飾的成員,只有在相同套件的類別程式碼中,才可以直接存取,也就是「套件範圍權限」。如果不同套件的類別程式碼中,想要直接存取,就會出現上圖的錯誤訊息。如果想在其它套件的類別程式碼中存取某套件的類別或物件成員,則該類別或物件成員必須是公開成員,在Java中要使用
public
加以宣告。例如:package cc.openhome.virtual;
public class CashCard {
...略
public CashCard(String number, int balance, int bonus) {
...略
}
public void store(int money) {
...略
}
public void charge(int money) {
...略
}
public int exchange(int bonus) {
...略
}
public int getBalance() {
return balance;
}
public int getBonus() {
return bonus;
}
public String getNumber() {
return number;
}
}
你可以宣告類別為public
,這表示它是個公開類別,可以在其它套件的類別中使用,你可以在建構式上宣告public
,這表示其它套件中的類別可以直接呼叫這個建構式,你可以在方法上宣告public
,這表示其它套件的方法可以直接呼叫這個方法。如果你願意,也可以在物件資料成員上宣告public
。
回憶一下 使用 package 管理類別 提過,套件管理其實還有權限管理上的概念,沒有定義任何權限關鍵字時,就是套件權限,在Java中其實有private
、protected
與public
三個權限修飾,你已經認識private
與public
的使用了,protected
則會在繼承時說明。
如果類別上沒有宣告public
權限關鍵字,類別中的方法宣告就算是public
,也等於是套件權限了,因為類別本身是套件權限,其它套件根本就無法使用類別了,更別說當中定義的方法。