Java提供了許多訪問修飾符來設定類,變數,方法和建構式的訪問級別, 四個訪問級別是 -
- 無關鍵字(不指定修飾符) - 對包可見,不需要修飾符,
private- 僅對類內部可見,public- 公開,對外部可見,protected- 對包和所有子類可見,
1. 默認訪問修飾符 - 無關鍵字
默認訪問修飾是指沒有為類,欄位,方法等顯式宣告訪問修飾符,
宣告沒有任何訪問控制修飾符的變數或方法可用于同一包中的任何其他類, 介面中的欄位隱式為public static final,介面中的方法默認為public,
示例
可以在沒有任何修飾符的情況下宣告變數和方法,如以下示例所示 -
class Order{
String version = "1.0.1";
boolean processOrder() {
return true;
}
}
2. 私有訪問修飾符 - private
宣告為private的方法,變數和建構式只能在宣告的類本身中訪問,專用訪問修飾符是限制性最強的訪問級別,類和介面不能宣告為:private,
如果類中存在公共getter方法,則可以在類中將變數宣告為private,使用private修飾符是物件封裝自身并隱藏來自外部世界的資料的主要方式,
示例
以下類使用private訪問控制 -
public class Logger {
private String format;
public String getFormat() {
return this.format;
}
public void setFormat(String format) {
this.format = format;
}
}
這里,Logger類的format變數是private,因此其他類無法直接檢索或設定它的值,
因此,為了使這個變數對外界可用,Logger類中定義了兩個公共方法:getFormat()用于回傳format的值,setFormat(String)用于設定它的值,
3. 公共訪問修飾符 - public
可以從任何其他類訪問使用public宣告的類,方法,建構式,介面等, 因此,可以從屬于Java任何類訪問在公共類中宣告的欄位,方法,塊,
但是,如果嘗試訪問的公共類位于不同的包中,則仍需要匯入公共類, 由于類繼承,類的所有公共方法和變數都由其子類繼承,
示例
以下方法使用public訪問控制 -
public static void main(String[] arguments) {
// ...
}
應用程式的main()方法必須宣告為public,否則Java解釋器無法呼叫它來運行該類,
4. 受保護的訪問修飾符 - protected
在超類中宣告受保護的變數,方法和建構式只能由其他包中的子類或受保護成員類的包中的任何類訪問,
受保護的訪問修飾符不能應用于類和介面, 方法,欄位可以宣告為protected,但是介面中的方法和欄位不能宣告為protected,受保護的訪問使子類有機會使用輔助方法或變數,同時防止非相關類嘗試使用它,
示例
以下父類使用protected訪問控制,以允許它的子類覆寫openSpeaker()方法 -
class AudioPlayer {
protected boolean openSpeaker(Speaker sp) {
// 實作詳細代碼...
}
}
class StreamingAudioPlayer {
boolean openSpeaker(Speaker sp) {
// 實作詳細代碼...
}
}
在這里,如果將openSpeaker()方法定義為private,那么它將無法從AudioPlayer以外的任何其他類訪問, 如果將類定義為public,那么它將被所有外部世界類訪問, 但這里的目的是僅將此方法暴露給它的子類,所以只使用protected修飾符,
訪問控制和繼承
強制執行以下繼承方法規則 -
- 在超類中宣告為
public的方法也必須在所有子類中都是public, - 在超類中宣告為
protected的方法必須在子類中也要宣告為:protected或public; 不能宣告為:private, - 宣告為
private的方法根本不能被繼承,因此沒有規則
最新Java學習資料分享給基礎的小伙伴,可以加群697888503免費下載

完整的Java初級,高級對應的學習路線和資料!專注于java開發,分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源專案,助力開發者成長!
歡迎關注微信公眾號:碼邦主

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/213510.html
標籤:其他
