溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的訪問修飾符

發(fā)布時間:2020-08-18 02:16:38 來源:網絡 閱讀:493 作者:Java萌新 欄目:編程語言

一. Java中的訪問修飾符

Java面向對象的基本思想之一是封裝細節(jié)并且公開接口。Java語言采用訪問控制修飾符來控制類及類的方法和變量的訪問權限,從而向使用者暴露接口,但隱藏實現(xiàn)細節(jié)。訪問控制分為四種級別:
(1)public: 用public修飾的類、類屬變量及方法,包內及包外的任何類(包括子類和普通類)均可以訪問;
(2)protected: 用protected修飾的類、類屬變量及方法,包內的任何類及包外那些繼承了該類的子類才能訪問(此處稍后解釋),protected重點突出繼承;
(3)default: 如果一個類、類屬變量及方法沒有用任何修飾符(即沒有用public、protected及private中任何一種修飾),則其訪問權限為default(默認訪問權限)。默
認訪問權限的類、類屬變量及方法,包內的任何類(包括繼承了此類的子類)都可以訪問它,而對于包外的任何類都不能訪問它(包括包外繼承了此類的子類)。default重點突出包;
(4)private: 用private修飾的類、類屬變量及方法,只有本類可以訪問,而包內包
java的訪問修飾符
綠色 代表可行 紅色 代表不可行
重要總結:通過上面的分析,我們可以看到:

  1. public、private和protected對我們來說沒有任何異議。
  2. 頂層類只能用public訪問修飾符和default(默認)訪問修飾符修飾,其中用默認修飾符修飾的類(及沒有任何修飾符的類,如class B{})不能被其他包中的類繼承,這也說明了default(默認)訪問修飾符突出的是包權限
  3. protected:本人做了一次實驗,發(fā)現(xiàn)在不同包的子類中,new一個父類對象,并用該父類對象去訪問父類中的用protected修飾的類屬變量和方法時不能訪問,而new一個子類對象時,子類對象可以訪問(說明protected修飾的類可以被其他包中的類繼承)。也可以在子類重寫父類的方法中使用super關鍵字調用。這豈不是和上面表格中的總結(紅色對勾)沖突了?本人也是百思不得其解。最后在網上找到了一個相對比較認可的解釋,如下:
    protected修飾符的修飾的成員變量和方法也稱為受保護的成員變量和方法, 受保護的成員變量和方法可以在本類或同一個包中的其它類(包括子類)中通過類的實例進行訪問,也可以被同一個包中的類或不同包中的類繼承,但是不能在不同包中的其它類(包括子類)中通過類的實例進行訪問。
      4. 如果一個類使用public修飾,那該類的類名必須與他所在的源文件名相同。一個.java源文件中有且只有一個public類,頂層類只能用public和默認修飾符(即無修飾符)修飾;

  4. final修飾的類不能被繼承,沒有子類。
  5. abstract修飾的類不能被實例化,必須被子類繼承。類只要有一個抽象方法就必定是抽象類,但抽象類不一定要有抽象方法。
    最終總結,就一句話:protected修飾符所修飾的類(這句話中指父類)屬成員變量和方法,只可以被子類訪問,而不管子類是不是和父類位于同一個包中。default修飾符所修飾的類屬成員變量和方法,只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬于子類限制修飾符,而default屬于包限制修飾符。
    默認是default。
    沒有friendly,只有public、private、protected、default。
    默認什么都不加,就是default(不用把default寫出來)。
    意思就是只能由跟這個類在同一個包中的類來訪問,比private限制更少,但比protected限制更多。
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI