Java 類訪問控制

2018-02-20 01:29 更新

Java教程 - Java類訪問控制


我們可以控制類成員變量和方法的訪問級別通過訪問說明符。

Java的訪問說明符是public,private,protected和默認(rèn)訪問級別。

級別

  • 公共類成員可以通過任何其他代碼訪問。
  • 私有類成員只能在其類中訪問。
  • 默認(rèn)訪問類成員沒有訪問說明符。 類的默認(rèn)功能可以在同一個包中的任何類訪問。
  • 類的受保護(hù)特性可用于同一個包(如默認(rèn))中的所有類及其子類。

受保護(hù)的功能比默認(rèn)功能更容易訪問。

要了解公共和私人訪問的影響,請考慮以下程序:

 
class Test {
  int a;        // default access
  public int b; // public access
  private int c; // private access
  // methods to access c
  void setc(int i) {
    c = i;
  }
  int getc() {
    return c;
  }
}
public class Main {
  public static void main(String args[]) {
    Test ob = new Test();
    ob.a = 1;
    ob.b = 2;
    // This is not OK and will cause an error
    // ob.c = 100; // Error!
    // You must access c through its methods
    ob.setc(100); // OK
    System.out.println("a, b, and c: " + ob.a + 
         " " + ob.b + " " + ob.getc());
  }
}

輸出:


成員訪問和繼承

子類不能訪問超類的私有成員。例如,考慮下面的簡單類層次結(jié)構(gòu)。如果嘗試編譯以下程序,您將收到錯誤消息。

 
class A {
  private int j; // private to A
}
class B extends A {
  int total;

  void sum() {
    total = j; // ERROR, j is not accessible here
  }
}

輸出:



Java的訪問矩陣

下表顯示了Java的訪問矩陣。是意味著無障礙,沒有意義無法訪問。

位置 私人的無修飾符保護(hù)公開
相同類 Yes Yes Yes Yes
相同的包子類 No Yes Yes Yes
相同的包非子類 No Yes Yes Yes
不同的包子類 No No Yes Yes
不同的包非子類No No No Yes

訪問修飾符及其目標(biāo)

并非所有修改器都可以應(yīng)用于所有功能。頂級類可能不受保護(hù)。方法可能不是短暫的。靜態(tài)可以將其應(yīng)用于自由浮動代碼塊。

下表顯示了功能和修改器的所有可能組合。yes表示我們可以使用該修飾符來控制對應(yīng)實體的訪問。

修飾符 變量方法構(gòu)造函數(shù)代碼塊
public yes yes yes yes no
protected no yes yes yes no
empty accessoryes yes yes yes yes
private no yes yes yes no
final yes yes yes no no
abstract yes no yes no no
static no yes yes no yes
native no no yes no no
transient no yes no no no
volatile no yes no no no
synchronized no no yes no yes
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號