1. 程式人生 > >Java中4種許可權修飾符修飾類、與成員的分析

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

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

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

1、類的2種許可權修飾符分析

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

換句話說就是,類的兩種許可權修飾符的訪問許可權所討論的維度是它的上一級:包。決定類僅在包內可見(default修飾時)還是包內包外都可見(public修飾時)!

2、成員的4種許可權修飾符分析

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

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

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

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

換句話說就是,成員的4種許可權修飾符的訪問許可權所討論的維度是它的上一級:類。決定成員在哪些類中是可見的。

3、類的許可權修飾符與成員的許可權修飾符的關聯

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

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

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

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

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

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

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

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