可見範圍html
權限的含義應該理解爲控制範圍,要把它理解成一個限制範圍的空間,更爲準確的說叫作可見範圍java
訪問控制的等級,從最大權限到最小權限依次爲:public、protected、包訪問權限(沒有關鍵詞)、和privateoracle
簡單說就是:spa
示例:code
package test.b; import test.a.Super; public class SubClass extends Super{ public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.publicFun(); subClass.protectedFun(); } }
打印信息:htm
publicFun
protectedFun
子類位於不一樣的包中,能夠訪問公有方法,能夠訪問protected方法 不能訪問默認的包訪問權限以及私有的對象
額外的例子:blog
package test.b; import test.a.Super; public class SubClass extends Super { public static void main(String[] args) { Super superClass = new Super(); superClass.publicFun(); superClass.protectedFun(); } }
編譯器直接報錯繼承
若是非要執行,也是直接報錯文檔
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method protectedFun() from the type Super is not visible
at test.b.SubClass.main(SubClass.java:12)
相信也有很多人人把上面這種形式的代碼理解爲:子類中訪問父類的protected方法
而且以爲很奇怪,而且認爲 子類不一樣包中並不能訪問父類的protected方法
其實這是概念錯了
雖然是在子類中,可是倒是使用父類的對象,調用父類的protected方法
這是在不一樣包中,訪問protected方法 固然是錯誤的
protected的含義是指子類能夠訪問,說的是子類直接訪問父類的protected方法
而不是說子類中,能夠調用父類的對象訪問父類的protected方法
子類能夠訪問,能夠在子類訪問不是一個概念
你能夠訪問和在你家訪問顯然差異很大
總結:
public 什麼都不用管,誰均可以用
private 只有本身本類能夠用,本類天然限定到某個Class定義範圍,哪怕你定義類或者子類在同一個文件中,都是白扯
默認的包訪問權限 同一個包中,無論其餘條件,管你是否是子類都不要緊的,不要本身去混淆
protected 就是默認的包訪問權限擴展了一下, 子類對象能夠訪問,無論是否是同一個包,而不是在子類中用父類對象訪問
關於protected關鍵點在於:
先看下官方文檔中的說明:
地址:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members,
A subclass inherits all of the public and protected members of its parent
A subclass does not inherit the private
members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.
子類繼承父類全部的成員 包括 屬性方法以及嵌套類,不包括構造方法
子類繼承全部的public和protected 的成員
子類不繼承私有的成員,不過若是父類中有public或者protected 方法訪問私有成員,子類可使用
子類繼承了父類的protected方法,因此子類有這個方法,因此子類可使用,可是子類是不能讀取某個父類對象的保護方法的(在包外)
繼承是繼承的結構,跟任何具體的對象的數據不要緊,因此子類中不能建立父類的對象而後調用父類的protected方法,不能在包外訪問protected方法
可是若是父類的方法是protected static的,能夠在子類中建立父類對象而後調用方法
由於子類是繼承的父類的,着重點在於類,繼承了類的成員,類的,類的