2012-05-11 70 views
1

對於沒有實現任何接口的私有嵌套類,「public」或「protected」方法沒有任何區別。對於沒有實現任何接口的私有嵌套類,「public」或「protected」方法沒有任何區別。

如果私人嵌套類沒有實現任何接口或從任何類繼承,對於其方法的修飾,似乎「公」或「受保護」或沒有修飾沒有任何區別。如果編譯器只允許他們使用「private」,那將會更有意義。所以 爲什麼Java允許他們?

class Enclosing { 

    private class Inner { 
     private void f1() {} 
     void f2() {} 
     protected void f3() {} 
     public void f4() {} 
    } 

    void test() { 
     Inner o= new Inner(); 
     o.f1(); 
     o.f2(); 
     o.f3(); 
     o.f4(); 
    } 
} 

回答

2

這裏是我只是想:

public class Test { 

    public void method(){ 

     Innerclass ic = new Innerclass(); 
     InnerClass2 ic2 = new InnerClass2(); 
     System.out.println(ic.i); 
     System.out.println(ic.j); 
     System.out.println(ic.k); 
     System.out.println(ic.l); 

     System.out.println(ic2.i); // Compile Error 
     System.out.println(ic2.j); 
     System.out.println(ic2.k); 
     System.out.println(ic2.l); 
    } 

    private class Innerclass{ 

     private int i; 
     public int j; 
     protected int k; 
     int l; 

    }; 

    private class InnerClass2 extends Innerclass{ 

    } 

} 

這有一個錯誤如上所述。

  1. 即使內部類是私有的,內部類的所有成員都可以通過封裝/外部類來訪問,而不管它們的可見性/訪問修飾符如何。
  2. 但訪問修飾符確實重要,如果一個內部類擴展另一個內部類。
  3. 這是適用於任何通過繼承相關的類的一般繼承規則
  4. 因此,Java允許私有內部類中的所有訪問修飾符。
+0

我的問題是公共/保護/無方法不作區別的內部類不繼承... –

+0

它不會使你所給出的例子任何區別。檢查我的答案中的例子,它有所作爲。你的問題是_Why是否允許他們?_ – Santosh

+0

我不是在談論私人方法。我涉及公共/保護/包訪問修飾符。如果你刪除你的私人會員。你能看到public/protect/package訪問修飾符之間的區別嗎? –

0

private表示只能通過類作用域訪問。突然這個規則不適用於嵌套類。

我沒有定義任何其他類型的嵌套類除外的private。而他們的成員,我想從父類訪問我使他們成爲public

+0

NO.Public /私人不作區別。嵌套類的私有方法可以通過它的封閉類和其他嵌套類訪問。 –

相關問題