java訪問權限的問題。本站提示廣大學習愛好者:(java訪問權限的問題)文章只能為提供參考,不一定能成為您想要的結果。以下是java訪問權限的問題正文
關於java中的四種訪問修飾符,public ,default ,protected ,private的作用范圍本以為很熟習了,但碰到了這樣一段代碼:
package pac1;
public class Parent {
protected int i;
protected class Inner{
}
}
package pac2;
import pac1.Parent;
public class Child extends Parent {
public static void main(String args[]){
new Child().i=0;
Inner i = new Parent().new Inner();
}
}
問題
代碼的意思是,父類與子類不在一個包,父類中有protected的外部類,如今想在子類中生成父類中外部類對象。但是發現報這錯誤:
Error:(8, 28) java: Inner()可以在pac1.Parent.Inner中訪問protected
考慮
protected的訪問權限是這說的,同一個包下是可以隨意訪問的,其他包下只要之類可以訪問。確實Inner i = new Parent().new Inner();
右邊是沒有問題的,但是左邊是外部類生成辦法,為什麼不能訪呢?
原來我在這裡只思索了Parent和Child的包地位和承繼關系,而沒有思索外部類和Child也是不同包,而Inner的結構函數訪問權限不為public,因而在不同包又沒有繼關系的Child是不能生成Inner的。
其實報的錯誤就說了問題的緣由,Inner()所在的包為pac1.Parent.Inner,修飾符為protected,因而說Inner()可以在pac1.Parent.Inner中訪問protected,也就是同包才干訪問。闡明多考慮報的錯誤也是很重要的。
知道緣由了,只需求將Inner結構函數改為publi就可以了。