可能大部分人隻知道通路權限修飾符的通路範圍,卻不太清楚具體的使用情況,今天我來為大家梳理一下。
Java 的通路權限修飾符有:public,private,protected,預設不寫,這四種。主要說以下兩個方面:
一、可通路的範圍

1. public 表明該資料成員、成員函數是對所有使用者開放的,所有使用者都可以直接進行調用。
2. private 表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财産神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。
3. protected 對于子女、朋友來說,就是public 的,可以自由使用,沒有任何限制,而對于其他的外部class,protected就變成private 。
4. friendly修飾的類叫友元類,在另外一個類中使用友好類建立對象時,要保證它們在同一包中,就是說在一個包内的類互為友元類。
注釋:
1、友元類就是預設不寫的情況。
2、同包是指類中的backage名稱相同。并無父子包一說。
二、修飾情況
類:
public 将一個類聲明為公共類,他可以被任何對象通路,一個程式的主類必須是公共類。
friendly 預設的修飾符,隻有在相同包中的對象才能使用這樣的類。
成員變量:
public(公共通路修飾符)
private(私有通路修飾符)指定該變量隻允許自己的類的方法通路,其他任何類(包括子類)中的方法均不能通路。
protected(保護通路修飾符)指定該變量可以别被自己的類和子類通路。在子類中可以覆寫此變量。
friendly ,在同一個包中的類可以通路,其他包中的類不能通路。
方法:
public(公共修飾符)
private(私有修飾符)指定此方法隻能有自己類等方法通路,其他的類不能通路(包括子類)
protected(保護通路修飾符)指定該方法可以被它的類和子類進行通路。
friendly ,在同一個包中的類可以通路,其他包中的類不能通路。
總結:
1、以package為前提:分為兩種情況,兩個類的package相同時是可以通路到類的,package不同時就看是不是public或者是不是子類。
2、以類為準則:這些修飾符不管是作用在類、成員變量、方法上,都是相對于類來說的;也就是說成員和方法的通路必須要先能夠通路到類。
升華總結:
1、背景:這就涉及類的使用了,你想一個類中真正啟作用的是不是方法,方法中要使用的自己類中的成員變量和方法,不管你通路修飾符是什麼都
能夠通路自身的成員變量和方法對不對。但是你想通路其他的類就涉及到通路權限的問題了對吧!由此得出通路權限修飾符是為類而設計
的,你想通路類,就得先找到類,就出現了package。package的值就代表你這個類的位置。是以關鍵點出現在package和類的上面。
2、類的通路場景:A類通路B類,隻有A類能夠通路B類時才能通路其中的方法,順序都是從左到右,如下圖所示
A、B的package
A是否能通路B
在A類中通路B類成員變量和方法
相同
可以
有private修飾的不能通路,其他都可通路
不同
類的修飾符public或者A是子類才可以
隻有public或者protected修飾的能夠通路
3、類的通路修飾符規則:
1> 請思考一下,為什麼上面的通路要提及子類呢?為什麼子類可以通路而父類不能通路呢?其實不難發現,你想通路到該類你必須先找到他吧!
也不難看出他需要所通路類的位址,這就出現了import關鍵字,他就是用來指明你所需要通路的類的位址的。因為子類繼承了父類,import
了父類的位址,是以能夠通路。其他也就不用多說你也知道,如果想通路一個類,很簡單import就行了對吧!如果是在同一個包自然不用import。
也就說明了通路類的真正規則是在package和import這兩個關鍵字上的,同包就package,不同包就import。
2> 是不是所有的類都可以import呢?你不難發現類的通路修飾符就兩種public和預設不寫,而預設不寫也就是友元類。他是隻能在同包中使用,
不同包是不能使用的,不同包不能使用也就意味着不能import,是以也不能被其他包的類所繼承。
4、成員變量和方法的通路修飾符規則:
這個通路都是能夠通路到另一個類才有效,是以以下是能夠通路到另一個類情況:
同包是除了private修飾的成員變量和方法,其他都可以通路。主要說一下不同包的情況,對于預設不寫的情況都是不可通路的,這也很好了解
他需要的包相同,protected的修飾符是需要繼承才能通路。
精簡總結:
public 開放所有,
private 不能跨類通路,
friendly 不能跨包通路,
protected 跨包需要繼承才能通路。
最簡總結:預設不寫不跨包,保護跨包要繼承。
以上是自己的學習心得,希望能幫到大家更好的了解,不足之處歡迎指正。謝謝大家!