Java的后宮訪問(wèn)控制符們

訪問(wèn)權(quán)限級(jí)別?。?!
private default protected public
同一個(gè)類中
同一個(gè)包中
子類中
全局范圍內(nèi)

<p align = "center"> 我知道,你肯定看過(guò)這表格很多次了 </p>
<p align = "center"> 因?yàn)槲乙彩沁@樣,然而……</p>
<p align = "center"> 不知道為啥并沒(méi)有記住</p>
<p align = "center"> 當(dāng)有人問(wèn)我的時(shí)候</p>
<p align = "center"> 我突然還是一片空白……</p>
<p align = "center"> 我也很無(wú)奈啊</p>
<p align = "center"> 打好基礎(chǔ)</h6>
<p align = "center"> 人人有責(zé)</h6>


  • private

當(dāng)前類訪問(wèn)權(quán)限:如果類里的一個(gè)成員(包括Field、方法和構(gòu)造器等)使用private來(lái)修飾,則這個(gè)成員只能在當(dāng)前類的內(nèi)部被訪問(wèn)。

  • default

包訪問(wèn)權(quán)限:類里的一個(gè)成員(包括Field、方法和構(gòu)造器等)或者一個(gè)外部類不使用任何訪問(wèn)控制符修飾。default訪問(wèn)控制的成員或外部類可以被相同包下的其他類訪問(wèn)

  • protected

子類訪問(wèn)權(quán)限:如果一個(gè)成員(包括Field、方法和構(gòu)造器等)使用protected訪問(wèn)控制符修飾,那么這個(gè)成員既可以被同一個(gè)包中的其他類訪問(wèn),也可以被不同包中的子類訪問(wèn)。
通常情況下,如果使用protected來(lái)修飾一個(gè)方法,通常是希望子類來(lái)重寫(xiě)這個(gè)方法

  • public

公共訪問(wèn)權(quán)限:類里的一個(gè)成員(包括Field、方法和構(gòu)造器等)或者一個(gè)外部類使用public任何訪問(wèn)控制符修飾,那么這個(gè)成員或外部類就可以被所有類訪問(wèn),不管訪問(wèn)類和被訪問(wèn)的類是否處于同一個(gè)包,是否具有繼承關(guān)系。


<p align = "center"> 不知道大家能不能分得清</p>
<p align = "center"> 我總是記不清default和protected</p>
<p align = "center"> 還是我理解的不到位</p>
<p align = "center"> 再次重申</p>
<p align = "center"> 打好基礎(chǔ)</p>
<p align = "center"> 人人有責(zé)


default:同一包下可訪問(wèn)
protected:同一包和所有子類可訪問(wèn)

<h2 align = "center">那么,再來(lái)一次</h2>

修飾符 說(shuō)明
private 私有的,在同一類內(nèi)可見(jiàn)。
default 在同一包(包括子類和非子類)內(nèi)可見(jiàn)。
protected 受保護(hù)的,對(duì)同一包內(nèi)的類和所有子類可見(jiàn)。
public 公有的,對(duì)所有類可見(jiàn)。

  1. 這里的可見(jiàn)、可訪問(wèn)指的是能不能通過(guò)** ”類的對(duì)象.變量名“**的方式訪問(wèn),這是因?yàn)槌齭tatic聲明的變量屬于類變量外,其他的都屬于實(shí)例變量,是屬于某個(gè)對(duì)象的。

Person p = new Person(); p.age直接訪問(wèn)age變量,對(duì)于那些私有的變量,很多情況下會(huì)對(duì)外提供public的setter和getter方法來(lái)供外部訪問(wèn)。

  1. 要注意的是,對(duì)于有繼承關(guān)系的子類來(lái)說(shuō),比如 class A extends B,A直接繼承擁有了默認(rèn)的(在同一包下)、protected、public的這個(gè)字段,可以直接使用該字段,而不用通過(guò)再次的實(shí)例化父類或"父類對(duì)象.字段"的形式訪問(wèn),因?yàn)樵趯?shí)例化A類的時(shí)候父類B已經(jīng)實(shí)例化好了。特別的,對(duì)于protected來(lái)說(shuō),如下形式是編譯不能通過(guò)的。
// 注意包
package com.a;
public class A extends B{
    public void test(){
        B b = new B();
        String str = b.age; // 錯(cuò)!不同包下的子類不能通過(guò)實(shí)例出來(lái)的父類獲取protected的變量
        String str2 = age; // 正確,A類繼承了B,直接擁有了該字段
        String str3 = b.birthday; // 正確,birthday為public
    }
}
// 注意包
package com.b
public class B{
    protected String age = "20";
    public String birthday = "1995";
}

結(jié)論

  • 在訪問(wèn)控制符的約束前提下
    • 對(duì)于非繼承類關(guān)系:使用 “實(shí)例變量.變量名的形式訪問(wèn)”(static類變量除外)
    • 對(duì)于有繼承關(guān)系的子類:子類直接繼承了擁有了默認(rèn)的(在同一包下)、protected、public的這個(gè)字段,可以直接使用該字段。

<h2 align = "center">打好基礎(chǔ),人人有責(zé)</h2>

看書(shū)的時(shí)候細(xì)致一點(diǎn)啊,表像我一樣囫圇吞棗啊,一定要充分理解再往下進(jìn)行。不然越到后面越覺(jué)得懷疑人生有木有,留意點(diǎn)點(diǎn)滴滴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,734評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,597評(píng)論 19 139
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,265評(píng)論 0 62
  • 1、.java源文件: 一個(gè)以”.java“為后綴的源文件:只能有一個(gè)與文件名相同的類,可以包含其他類。 2、類方...
    Hughman閱讀 1,746評(píng)論 1 9
  • 今天 僅此而已……
    zzp一直在努力閱讀 234評(píng)論 0 0

友情鏈接更多精彩內(nèi)容