Java那些事(一)——訪問級別修飾符

老夫的gayhub
老夫的主頁
謝謝閱讀html

Java那點事-訪問級別修飾符

注:本文討論的全部狀況沒有考慮嵌套類。java

Java的訪問級別修飾符(Access Level Modifiers)有四種,按照可訪問範圍的大小排列,以下表所示(雖然官方文檔也有,可是老夫知道泥萌是不會去看的_(:з)∠)_):
表格的橫行列舉的是四個訪問範圍。git

修飾符 中文含義 類(class) 包(package) 子類(subclass) 全部類(world)
public 公有
protected 保護 ×
缺省 × ×
private 私有 × × ×

注1:缺省狀況,在oracle官方文檔裏也被叫作package-private,咱們能夠理解爲包-私有。
注2:爲什麼全部類不用All Class,由於文檔裏就是這麼寫的= ̄ω ̄=。github

老夫簡單的介紹public、private和package-private這三種狀況,重點介紹protected。oracle

  • public這種訪問級別是範圍最大的,當泥萌使用該修飾符修飾類的成員的時候,表明該成員能夠被全部類訪問,即整個項目下都是能夠訪問的。
  • private與public剛好相反,它是整個訪問級別中範圍最小的,使用它修飾類的成員的時候,該成員只可以被該類內部訪問,外部是沒法訪問到的。
  • package-private這種狀況,在泥萌沒有使用其餘三種訪問級別時生效。該修飾符所控制的範圍最大是同一個包,也就是說,被修飾的成員在只需同一個包下便可被訪問。
  • protected這種訪問級別比較特殊,由於它還包含了子類也能夠訪問的這種狀況,子類這種狀況分爲兩種,一種是在同一個包下的子類,另外一種是在不一樣包下的子類,這兩種狀況,訪問被protected修飾的成員方式是不一樣的(這是本文今天的重點)。

直接來看代碼,一目瞭然,代碼清單以下:ui

項目部分包的目錄結構
clipboard.pngspa

parent.javacode

package com.smallclover.pack1;

public class Parent {
    protected void parent() {
        
    }
}

Child.java(與父類在同一個包下)htm

package com.smallclover.pack1;


public class Child extends Parent{
    public void child() {
        Parent p = new Parent();
        p.parent();//經過父類來訪問
        Child c = new Child();
        c.parent();//經過子類來訪問
    }
}

Child.java(與父類在不一樣包下)ip

package com.smallclover.pack2;

import com.smallclover.pack1.Parent;

public class Child extends Parent{
    public void child() {
        Child c = new Child();
        c.parent();//只能經過子類來訪問
    }
}

未完待續(~o( =∩ω∩= )m)

參考文檔:https://docs.oracle.com/javas...

相關文章
相關標籤/搜索