類可以是public
或default
(或包級別)。在本教學中主要介紹 public
,private
,protected
這幾個存取級別修辭符的使用。
類成員的存取級別確定程式的哪個區域可以存取它。 以下四個存取級別修飾符之一可以用於類成員:
public
)private
)protected
)前三種型別的存取級別使用以下三個關鍵字之一來指定:public
,private
或protected
。第四種型別稱為預設存取級別(或包級別),並且通過不使用存取修飾符來指定。
如果類成員使用public
關鍵字宣告為公開,如果類本身可存取的話,則可以從Java程式碼中的任何位置存取它。
如果使用private
關鍵字將類成員宣告為私有,則只能在宣告類的主體中存取,而在其他任何地方都不能存取。
如果使用protected
關鍵字將類成員宣告為保護,則可以從同一包中的類或該類的子類來存取此類成員,即使子類位於不同的包中也是可以存取的。
如果不為類成員使用任何存取級別修辭符,則它具有包級別存取許可權。 具有包級別存取許可權的類成員可以從同一個包中存取。
類成員的存取級別可以從最嚴格到最不嚴格,即:private
,package-level
,protected
和public
。
以下程式碼顯示如何使用不同的存取級別:
public class Main {
private int num1; // private access level
int num2; // package-level access
protected int num3; // protected access level
public int num4; // public access level
public static int count = 1; // public access level
// private access level
private void m1() {
}
// package-level access
void m2() {
}
// protected access level
protected void m3() {
}
// public access level
public void m4() {
}
// private access level
private static void doSometing() {
}
}
注意:可以為類的範例和靜態成員指定存取級別。
它是一個約定,指定存取級別修改器作為宣告中的第一個修飾符。要宣告靜態公共欄位,請首先使用public
修飾符,然後使用static
修飾符作為約定。必須要考慮類及其成員的存取級別,以確定類成員是否可存取。
以下程式碼顯示了如何在建立Java bean時使用存取級別修飾符。
class Account {
private double balance;
public double getBalance() {
return this.balance;
}
public int save(double amount) {
if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) {
System.out.println("Invalid credit amount: " + amount);
return -1;
}
this.balance = this.balance + amount;
return 1;
}
public int spend(double amount) {
if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) {
System.out.println("Invalid debit amount: " + amount);
return -1;
}
if (this.balance < amount) {
System.out.println("Insufficient fund. Debit attempted: " + amount);
return -1;
}
this.balance = this.balance - amount;
return 1;
}
}
public class Main {
public static void main(String[] args) {
Account ac = new Account();
double balance = ac.getBalance();
System.out.println("Balance = " + balance);
ac.save(2);
ac.spend(1);
balance = ac.getBalance();
System.out.println("Balance = " + balance);
// Attempt to credit and debit invalid amounts
ac.save(-2);
ac.spend(Double.POSITIVE_INFINITY);
balance = ac.getBalance();
System.out.println("Balance = " + balance);
// Attempt to debit more than the balance
ac.spend(200.00);
balance = ac.getBalance();
System.out.println("Balance = " + balance);
}
}
上面的程式碼生成以下結果。
Balance = 0.0
Balance = 1.0
Invalid credit amount: -2.0
Invalid debit amount: Infinity
Balance = 1.0
Insufficient fund. Debit attempted: 200.0
Balance = 1.0