Java的外部類為什么不能使用private、protected進行修飾


1.前提

對於Java外部類和內部類的概念不清楚的,可以自行去百度一下,了解一下。

2.Java的四種權限修飾符

private(私有的)無法訪問:使用private關鍵字,就意味着被聲明的成員或方法,除了本類,其他任何類都無法訪問。

public(公共的)接口訪問權限:使用public關鍵字,就意味着被聲明的成員或方法對所有類都是可以訪問的。

protected(受保護的)繼承訪問權限:使用protected關鍵字,就意味着被聲明的成員或方法,在子類以及相同包內的其他類都是可以訪問的。

default(默認的)包訪問權限:即不寫任何關鍵字,就意味着相同包內的其他類(包括子類)可以訪問,包外都不可以訪問。

修飾符 同類中 同一個包中(子類和無關類) 不同包(子類) 不同包(無關類)
public ✔️ ✔️ ✔️ ✔️
protected ✔️ ✔️ ✔️
default默認 ✔️ ✔️
private ✔️

3.為什么不能使用private、protected修飾外部類

為什么不能用private修飾Java外部類?

因為如果使用private修飾Java外部類,那么這個類不能創建實例,這個類的屬性和方法不能被訪問,那么創建這個類毫無意義,所以不能使用private修飾Java外部類。

為什么不能用protected修飾Java外部類?

舉個栗子,如果類A用protected修飾,與類A不同包的類B想要訪問類A的話,類B就必須是繼承類A的(或者說類B必須為類A的子類),但是類B繼承類A的前提又是類B可以訪問到類A,仔細想想會發現這里是沖突的,其實這就說明了為什么不能用protected來修飾外部類。再說,protected是用來表示在繼承關系中的訪問權限的,在同一個包和子類中都可以訪問,因為繼承就是為了擁有父類的屬性和方法,所以protected是用於修飾類的方法和屬性的,也就是說,我想要這個類的屬性和方法可以被任何子類繼承,我就用protected。我想要這個類的屬性和方法不能被任何子類繼承,我就用private。同理,我想要這個類被繼承,我就用abstract。我不想這個類被繼承,我就用final。所以,用protected修飾類有什么意義呢?關鍵點還是在於第一句話,protected是用來表示在繼承關系中的訪問權限的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM