Java訪問控制修飾符
訪問控制修飾符
Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Javav支持 4 種不同的訪問權限。
-
default (即缺省,什麽也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
-
private : 在同一類內可見。使用對象:變量、方法。 註意:不能修飾類(外部類)
-
public : 對所有類可見。使用對象:類、接口、變量、方法
-
protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 註意:不能修飾類(外部類)。
我們可以可以通過以下表來說明訪問權限:
修飾符 | 當前類 | 同一包內 | 子孫類 | 其他包 |
---|---|---|---|---|
public |
Y | Y | Y | Y |
protected |
Y | Y | Y | N |
default |
Y | Y | N | N |
private |
Y | N | N | N |
1 class AudioPlayer { 2 protected boolean openSpeaker(Speaker sp) { 3 // 實現細節 4 } 5 } 6 7 class StreamingAudioPlayer extends AudioPlayer { 8 protected boolean openSpeaker(Speaker sp) { 9 // 實現細節 10} 11 }
如果把 openSpeaker() 方法聲明為 private,那麽除了 AudioPlayer 之外的類將不能訪問該方法。
如果把 openSpeaker() 聲明為 public,那麽所有的類都能夠訪問該方法。
如果我們只想讓該方法對其所在類的子類可見,則將該方法聲明為 protected。
非訪問修飾符
為了實現一些其他的功能,Java 也提供了許多非訪問修飾符。
static 修飾符,用來修飾類方法和類變量。
final 修飾符,用來修飾類、方法和變量,final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,是不可修改的。
abstract 修飾符,用來創建抽象類和抽象方法。
synchronized 和 volatile 修飾符,主要用於線程的編程。
static 修飾符
-
靜態變量:
static 關鍵字用來聲明獨立於對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。 靜態變量也被稱為類變量。局部變量不能被聲明為 static 變量。
-
靜態方法:
static 關鍵字用來聲明獨立於對象的靜態方法。靜態方法不能使用類的非靜態變量。靜態方法從參數列表得到數據,然後計算這些數據。
- 靜態變量並不是說其就不能改變值,不能改變值的量叫常量。 其擁有的值是可變的 ,而且它會保持最新的值。說其靜態,是因為它不會隨著函數的調用和退出而發生變化。即上次調用函數的時候,如果我們給靜態變量賦予某個值的話,下次函數調用時,這個值保持不變。
Java訪問控制修飾符