Java類成員存取級別


類可以是publicdefault(或包級別)。在本教學中主要介紹 publicprivateprotected 這幾個存取級別修辭符的使用。
類成員的存取級別確定程式的哪個區域可以存取它。 以下四個存取級別修飾符之一可以用於類成員:

  • 公開(public
  • 私有(private
  • 保護(protected
  • 預設或包級別存取

前三種型別的存取級別使用以下三個關鍵字之一來指定:publicprivateprotected。第四種型別稱為預設存取級別(或包級別),並且通過不使用存取修飾符來指定。

如果類成員使用public關鍵字宣告為公開,如果類本身可存取的話,則可以從Java程式碼中的任何位置存取它。

如果使用private關鍵字將類成員宣告為私有,則只能在宣告類的主體中存取,而在其他任何地方都不能存取。

如果使用protected關鍵字將類成員宣告為保護,則可以從同一包中的類或該類的子類來存取此類成員,即使子類位於不同的包中也是可以存取的。

如果不為類成員使用任何存取級別修辭符,則它具有包級別存取許可權。 具有包級別存取許可權的類成員可以從同一個包中存取。

類成員的存取級別可以從最嚴格到最不嚴格,即:privatepackage-levelprotectedpublic

範例

以下程式碼顯示如何使用不同的存取級別:

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