Java學習筆記十九:Java中的訪問控制修飾符

来源:https://www.cnblogs.com/qiaoyifan/archive/2018/06/07/9153370.html
-Advertisement-
Play Games

Java中的訪問控制修飾符一:Java修飾符的種類;二:訪問控制修飾符;1.預設訪問修飾符-不使用任何關鍵字;2.私有訪問修飾符-private;3.公有訪問修飾符-public;4.受保護的訪問修飾符-protected; ...


Java中的訪問控制修飾符

 

 

一:Java修飾符的種類;

  • 訪問修飾符
  • 非訪問修飾符

  修飾符用來定義類、方法或者變數,通常放在語句的最前端。我們通過下麵的例子來說明:

public class HelloWorld {
       // ...
    }
    private boolean myFlag;
    static final double weeks = 9.5;
    protected static final int BOXWIDTH = 42;
    public static void main(String[] arguments) {
       // 方法體
    }

 

二:訪問控制修飾符;

  Java中,可以使用訪問控制符來保護對類、變數、方法和構造方法的訪問。Java 支持 4 種不同的訪問許可權。

 

  • default (即預設,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、介面、變數、方法。

  • private : 在同一類內可見。使用對象:變數、方法。 註意:不能修飾類(外部類)

  • public : 對所有類可見。使用對象:類、介面、變數、方法

  • protected : 對同一包內的類和所有子類可見。使用對象:變數、方法。 註意:不能修飾類(外部類)

 

訪問修飾符的總結:

1.預設訪問修飾符-不使用任何關鍵字;

  使用預設訪問修飾符聲明的變數和方法,對同一個包內的類是可見的。介面里的變數都隱式聲明為 public static final,而介面里的方法預設情況下訪問許可權為 public。

如下例所示,變數和方法的聲明可以不使用任何修飾符。

 

String version = "1.5.0";
boolean processOrder() {
   return true;
}

 

2.私有訪問修飾符-private;

  私有訪問修飾符是最嚴格的訪問級別,所以被聲明為 private 的方法、變數和構造方法只能被所屬類訪問,並且類和介面不能聲明為 private。

  聲明為私有訪問類型的變數只能通過類中公共的 getter 方法被外部類訪問。

  Private 訪問修飾符的使用主要用來隱藏類的實現細節和保護類的數據。

下麵的類使用了私有訪問修飾符:

 

public class HelloWorld {
       private String format;
       public String getFormat() {
          return this.format;
       }
       public void setFormat(String format) {
          this.format = format;
       }
    }

 

  實例中,HelloWorld 類中的 format 變數為私有變數,所以其他類不能直接得到和設置該變數的值。為了使其他類能夠操作該變數,定義了兩個 public 方法:getFormat() (返回 format的值)和 setFormat(String)(設置 format 的值)

補充:this關鍵字;

1.this關鍵字代表當前對象

this.屬性 操作當前對象的屬性

this.方法 調用當前對象的方法

封裝對象的屬性的時候,經常會使用this關鍵字

3.公有訪問修飾符-public;

  被聲明為 public 的類、方法、構造方法和介面能夠被任何其他類訪問。

  如果幾個相互訪問的 public 類分佈在不同的包中,則需要導入相應 public 類所在的包。由於類的繼承性,類所有的公有方法和變數都能被其子類繼承。

以下函數使用了公有訪問控制:

 

public static void main(String[] args) {
       // ...
    }

 

註:Java 程式的 main() 方法必須設置成公有的,否則,Java 解釋器將不能運行該類。

 

4.受保護的訪問修飾符-protected;

protected 需要從以下兩個點來分析說明:

  • 子類與基類在同一包中:被聲明為 protected 的變數、方法和構造器能被同一個包中的任何其他類訪問;

  • 子類與基類不在同一包中:那麼在子類中,子類實例可以訪問其從基類繼承而來的 protected 方法,而不能訪問基類實例的protected方法。

  protected 訪問修飾符不能修飾類和介面,方法和成員變數能夠聲明為 protected,但是介面的成員變數和成員方法不能聲明為 protected。

  子類能訪問 protected 修飾符聲明的方法和變數,這樣就能保護不相關的類使用這些方法和變數。

下麵的父類使用了 protected 訪問修飾符,子類重寫了父類的 openSpeaker() 方法。

 

class HelloWorld {
       protected boolean openSpeaker(Speaker sp) {
          // 實現細節
       }
    }
     
    class StreamingAudioPlayer extends AudioPlayer {
       protected boolean openSpeaker(Speaker sp) {
          // 實現細節
       }
    }

 

  如果把 openSpeaker() 方法聲明為 private,那麼除了 HelloWorld之外的類將不能訪問該方法。

  如果把 openSpeaker() 聲明為 public,那麼所有的類都能夠訪問該方法。

  如果我們只想讓該方法對其所在類的子類可見,則將該方法聲明為 protected。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本書是Eric Evans對他自己寫的《領域驅動設計-軟體核心複雜性應對之道》的一本字典式的參考書,可用於快速查找《領域驅動設計》中的諸多概念及其簡明解釋。 其它本系列其它文章地址: [譯文]Domain Driven Design Reference(一)—— 前言 [譯文]Domain Driv ...
  • 約定 還記得上版本的第二十四篇的約定嘛?現在出來履行啦~ 為什麼要重製? 之前寫的專欄都是按照心情寫的,在最初的時候筆者什麼都不懂,而且文章的發佈是按照很隨性的一個順序。結果就是說,大家都看完了,都還對框架沒有一個感覺,感覺很亂。而現在,經過兩年多的摸索,筆者已經對框架的體系有了一個瞭解,所以希望再 ...
  • Eclipse作為軟體開發的常用工具,被很多的人所歡迎,尤其是豐富的快捷鍵,可以極大的提高編碼的效率,下麵將常用的快捷鍵做了整理,便於大家學習和使用。 Eclipse常用快捷鍵 1代碼提示 Alt+/; 2代碼複製 ctrl+alt+方向鍵(上下) 複製快捷鍵 3單行註釋 方式一:ctr+/ 方式二 ...
  • 轉自:https://my.oschina.net/editorial-story/blog/1808757 本文是學習大型分散式網站架構的技術總結。對架構一個高性能、高可用、可伸縮及可擴展的分散式網站進行了概要性描述,並給出一個架構參考。文中一部分為讀書筆記,一部分是個人經驗總結,對大型分散式網站 ...
  • Java開源生鮮電商平臺-定時器,定時任務quartz的設計與架構(源碼可下載) 說明:任何業務有時候需要系統在某個定點的時刻執行某些任務,比如:凌晨2點統計昨天的報表,早上6點抽取用戶下單的佣金。 對於Java開源生鮮電商平臺而言,有定時推送客戶備貨,定時計算賣家今日的收益,定時提醒每日的提現金額 ...
  • 本文基於 jdk 1.8 。 CountDownLatch 的使用 "前面的文章" 中說到了 volatile 以及用 volatile 來實現自旋鎖,例如 java.util.concurrent.atomic 包下的工具類。但是 volatile 的使用場景畢竟有限,很多的情況下並不是適用,這個 ...
  • 譯者註:這是一篇很棒文章,使用有趣的敘述方式,從反面講解了作為一個優秀的 PHP 工程師,有哪些事情是你不能做的。請註意哦,此篇文章羅列的行為,都是你要儘量避免的。 隨著失業率越來越高,很多人意識到保全自己的工作是多麼的重要。那麼,什麼是保住自己工作,並讓自己無可替代的好方法呢?一個很簡單的事實是只 ...
  • 用 STS 創建 Maven 項目並不複雜,只是其中有一些坑在裡面,我在解決這些坑的時候發現很多人都遇到了相同的問題,因此把創建的步驟記錄在這裡。所有的步驟不外乎就是一些套路,並沒有什麼複雜的地方,只是在被套路的時候,找解決方法真是很煩人的一件事情。畢竟不是什麼大的技術問題,只是一個工具的使用,難道 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...