2016-06-15 74 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'類肯定不會__ fine_。請發佈代表您問題的可編譯代碼。 –

回答

-1

protected訪問修飾符意味着該字段或方法僅適用於類本身及其子級。由於類B未延伸B.BInner,因此無法訪問B.BInner.i

與訪問修飾符的工作最常用的方法是使用的getter/setter對,您可以在A.Inner聲明(因爲這是i聲明和B.BInner將繼承的方法):

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,它可以在任何地方使用。