Java中4種許可權修飾符修飾類、與成員的分析
阿新 • • 發佈:2018-12-12
前言:在最近做專案中,對許可權修飾符又有了新的認知,對這塊知識的脈絡也越來越清晰,來部落格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所修飾。
首先從成員的許可權修飾符我們知道,該成員在包內和包外的所有類中都是可見的,但是成員所在類的許可權修飾符限定了該類僅在包內中可見。
所以最終只能在包內中的類中,建立該成員所在類的物件進行成員的呼叫。