程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java訪問權限的問題

java訪問權限的問題

編輯:關於JAVA

java訪問權限的問題。本站提示廣大學習愛好者:(java訪問權限的問題)文章只能為提供參考,不一定能成為您想要的結果。以下是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的。

處理
  1. 其實報的錯誤就說了問題的緣由,Inner()所在的包為pac1.Parent.Inner,修飾符為protected,因而說Inner()可以在pac1.Parent.Inner中訪問protected,也就是同包才干訪問。闡明多考慮報的錯誤也是很重要的。

  2. 知道緣由了,只需求將Inner結構函數改為publi就可以了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved