關於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的。