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