Java 類(lèi)訪問(wèn)控制

2018-02-20 01:29 更新

Java教程 - Java類(lèi)訪問(wèn)控制


我們可以控制類(lèi)成員變量和方法的訪問(wèn)級(jí)別通過(guò)訪問(wèn)說(shuō)明符。

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

級(jí)別

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

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

要了解公共和私人訪問(wèn)的影響,請(qǐng)考慮以下程序:

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

輸出:


成員訪問(wèn)和繼承

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

 
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的訪問(wèn)矩陣

下表顯示了Java的訪問(wèn)矩陣。是意味著無(wú)障礙,沒(méi)有意義無(wú)法訪問(wèn)。

位置 私人的無(wú)修飾符保護(hù)公開(kāi)
相同類(lèi) Yes Yes Yes Yes
相同的包子類(lèi) No Yes Yes Yes
相同的包非子類(lèi) No Yes Yes Yes
不同的包子類(lèi) No No Yes Yes
不同的包非子類(lèi)No No No Yes

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

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

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

修飾符 類(lèi)變量方法構(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)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)