1. 程式人生 > >Java中修飾符的作用域及可見性

Java中修飾符的作用域及可見性

java中,針對不同的修飾詞,類及其類中的方法、域都有不同的可見性。以下為針對java中可見性的幾點總結。

1.java中的預設包(這個包是沒有名稱的),對於任何修飾詞來說,其中的內容只能對其包內類為可見。
2.對於java中的非預設包中的內容,各修修飾詞及其可見性如下表:

這裡寫圖片描述
public

public 修飾的成員可以在任何範圍內直接訪問,只是一種最寬鬆的訪問控制等級。需要注意的,所謂的直接訪問仍需要先建立或獲得一個相應類的物件然後才可以使用”物件名.成員“的方式訪問其屬性或呼叫其方法,但是出於資訊封裝和隱藏的需要一般不提倡把成員宣告為public的,而構造方法和需要外界直接呼叫的普通方法則適合宣告為public.

protected

protected修飾的成員可以在其所在類中、同一包中及子類中(無論子類在不在同一個包)被直接訪問,但不能在位於不同包中的非子類中被直接訪問,這裡需要特別宣告:在位於不同包的子類中必須是子類的物件才能直接訪問其父類的protected成員,而父類自身的物件反而不能訪問其所在類中宣告的protected成員。下面我就一個例子說明它:

原始碼:A.java

package p1;
public class A{
    public int m = 5;
    protected int n = 6;
}

源程式:B.java

package p2;
import
p1; public class B extends A{ public void mb(){ m = m + 1; n = n * 2; } public static void main(String[] args){ B b = new B(); b.m = 7; //合法 b.n = 8; //合法 A a = new A(); a.m = 9; //合法 a.n = 10; //不合法
} }
可以想象如果想讓Java類中的成員在所在包中可以直接訪問,且在其子類中也能訪問(子類有可能和父類不再在一個包中),但不願意在更大更範圍內公開時,就可以宣告為 protected.

default

預設訪問修飾符的成員只能在其所在類中或包中直接訪問,在不同包中即使是不同包的子類也不能直接訪問。

private
private成員只能在所在類中被直接訪問,是4種訪問等級最高的一個。