Java 訪問(wèn)級(jí)別成員

2018-01-18 15:19 更新

Java面向?qū)ο笤O(shè)計(jì) - Java訪問(wèn)級(jí)別成員


類可以是public或default(或包級(jí)別)。

類成員的訪問(wèn)級(jí)別確定程序的哪個(gè)區(qū)域可以訪問(wèn)它。以下四個(gè)訪問(wèn)級(jí)別修飾符之一可以用于類成員:

  • public
  • private
  • protected
  • Default 或者 package-level訪問(wèn)

前三種類型的訪問(wèn)級(jí)別使用以下三個(gè)關(guān)鍵字之一指定:public,private或protected。

第四種類型稱為默認(rèn)訪問(wèn)級(jí)別(或包級(jí)別),并且通過(guò)不使用訪問(wèn)修飾符來(lái)指定。

如果使用 public 關(guān)鍵字將類成員聲明為public,則可以從Java代碼中的任何位置訪問(wèn)它,如果類本身是可訪問(wèn)的。

如果使用 private 關(guān)鍵字將類成員聲明為private,則只能在聲明類的主體內(nèi)訪問(wèn),而在其他任何地方都不能訪問(wèn)。

如果使用 protected 關(guān)鍵字將類成員聲明為protected,則可以從同一個(gè)包或從類的后代訪問(wèn),即使后代位于不同的包中也是如此。

如果我們不為類成員使用任何訪問(wèn)級(jí)別修改器,則它具有包級(jí)別訪問(wèn)權(quán)限。具有包級(jí)別訪問(wèn)權(quán)限的類成員可以從同一個(gè)包訪問(wèn)。

類成員的訪問(wèn)級(jí)別可以從最嚴(yán)格到最不嚴(yán)格,作為private,package-level,protected和public。

例子

以下代碼顯示如何使用不同的訪問(wèn)級(jí)別:

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() {

  }
}

注意

可以為類的實(shí)例和靜態(tài)成員指定訪問(wèn)級(jí)別。

它是一個(gè)約定,指定訪問(wèn)級(jí)別修改器作為聲明中的第一個(gè)修飾符。

要聲明靜態(tài)公共字段,請(qǐng)首先使用 public 修飾符,然后使用 static 修飾符作為約定。

我們必須考慮類及其成員的訪問(wèn)級(jí)別,以確定類成員是否可訪問(wèn)。

以下代碼顯示了如何在創(chuàng)建Java bean時(shí)使用訪問(wèn)級(jí)別修飾符。

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);
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)