2016-06-15 6 views
0

他の内部クラスで の継承を通じて内部クラスの保護されたフィールドにアクセスしようとしています。しかし、私は問題に遭遇しました:継承を介して内部クラスの保護されたフィールドにアクセス

package a; 

    class A{ 

     public class Inner{ 
      protected int i =5; 
     } 
    } 

    package b; 
    class B{ 

     public class BInner extends A.Inner{ 
     dsds 
      void test(){ 
       System.out.println(i); // that's works fine, i 
      } 
     } 

     void print(){ 
     System.out.println(new BInner().i) // but why i cant access this field from here? Compiler just says that there is protected access ... 
     } 
    } 

このフィールドへのアクセス方法はありますか?

+0

あなたの 'BInner'クラスは間違いなく動作しません。あなたの問題を表すコンパイル可能なコードを投稿してください。 –

答えて

-1

protectedアクセス修飾子は、フィールドまたはメソッドがクラス自体とその子に対してのみ使用可能であることを意味します。 BクラスはB.BInnerを拡張しないため、B.BInner.iにはアクセスできません。

アクセス修飾子で動作する最も一般的な方法は、(iが宣言され、B.BInnerがメソッドを継承する場所それはだから)あなたはA.Innerに宣言することができゲッター/セッターのペアを、使用することです:

class A{ 

    public class Inner{ 
     protected int i =5; 

     public int getI() { 
      return i; 
     } 

     public void setI(int i) { 
      this.i = i; 
     } 
    } 
} 

B.BInnerオブジェクトのgetI()を呼び出すと、iの値が返され、publicなので、どこでも使用できます。

関連する問題