Java中4種許可權修飾符修飾類 成員的分析

2021-08-28 15:08:03 字數 1195 閱讀 9353

前言:在最近做專案中,對許可權修飾符又有了新的認知,對這塊知識的脈絡也越來越清晰,來部落格mark一下。

這篇部落格是對前兩篇部落格的乙個總結提煉(與需要了解提煉背景的朋友可以通過先看看前兩篇的背景介紹。

(ps.文中所說的default修飾指的是不加任何許可權修飾符。此外,為了敘述的方便,本文中涉及的類指的是外部類,涉及的成員指的是非靜態成員方法)

從之前部落格的分析中我們知道,外部類僅能被public和default修飾。當被default修飾時,該類僅在包內可見,在包外不可訪問;而被public修飾時,則不僅能在包內可見,在包外同樣可見。

1)private修飾的成員:該成員僅對自己這個類可見。

2)default修飾的成員:該成員對同乙個包中的類都可見。

3)protected修飾的成員:該成員除了對同乙個包中的類可見外,還對包外的子類(成員所在類的子類)可見。

這裡要注意乙個細節!protected這個許可權修飾符比較特殊的一點在於,protected是專為子類提供的修飾符。也就是說,在包外的子類中(假設叫這個子類為class son),即使是成員所在類的物件也無法訪問被protected修飾的成員,需要用son類的物件進行訪問(成員所在類如果有多個子類,別的子類的物件也不行)。

我之前看過一篇部落格,講述了object類中clone方法的使用,clone方法就是乙個被protected修飾符所修飾的方法。博主開篇就表明之前因為對protected修飾符的理解產生了偏差,從而出bug了,感興趣的朋友可以看下這篇部落格:

4)public修飾的成員:該成員不僅對同乙個包中的類可見,在包外的類中也都可見。

我們知道在進行成員呼叫的時候,需要用該成員所在類的物件進行呼叫。結合許可權修飾符的話,我們可以這樣分析乙個成員的呼叫:

1)先看成員的許可權修飾符,這樣可以知道成員在哪些類中是可見的。

2)再看該成員所在類的修飾符,這樣可以知道該類的物件是僅能包內可見還是包外也可見。

3)根據上述兩者,取範圍的交集。在交集所限定的範圍,進行成員的呼叫。

上述可能比較抽象,我們舉乙個例子來分析。

例如某個成員被public所修飾,而該成員所在類是被default所修飾。

首先從成員的許可權修飾符我們知道,該成員在包內和包外的所有類中都可見,但是成員所在類的許可權修飾符限定了該類僅在同乙個包中可見。

所以最終只能在同乙個包中的類裡面,建立該成員所在類的物件進行成員的呼叫。

修飾符 許可權修飾符

四種形式許可權修飾符的訪問情況 publicprotected不寫private 同乙個類中 四種都可以 同一包中的不同類 除了private剩下都可以 不同包下的子類 public protected 可以 不同包下的不同類 只有public可以 許可權修飾符 public protected 預...

Java 許可權修飾符

1.許可權修飾符 代表被修飾的成員變數或者成員方法的使用範圍 public 公共的 最大修飾符 被它修飾的成員在任何地方都可以被呼叫 預設 可以在本類中呼叫,也可以在同乙個包裡面的其他類中呼叫 protected 受保護的 可以在本類中呼叫 可以在用乙個包裡面被其他類中呼叫,不可以在其他包裡呼叫,但...

JAVA許可權修飾符

許可權修飾符 可呼叫範圍 public protected受保護的 default系統預設值 private 當前類可以 可以可以 可以同一包類 可以可以可以x 不同包的子孫類 可以可以xx 其他包類可以x xx注意點 public和default可以修飾類 方法 成員變數。protected pr...