2016-01-20 130 views
0

我正要創建一個類,其他類的Java:內部類的訪問級別

public class Sq { 
     class Inner { 
      private int a; //no getters setters 
          //a is private 
      private Inner (int a1) { 
       this.a = a1; 
      } 
     } 
    public static void main(String[] args) { 
     Sq outter = new Sq(); 
     Inner d = outter.new Inner(3); 
     System.out.println("Private a = " + d.a); 
    } 
} 

它的工作原理裏面..所以,我可以訪問內部的私人領域,也是我添加Inner2類,並試圖改變「一」從Inner2而且還曾:/

所以看起來像在內部類私人沒有那麼私人,看起來像它的公共在W內孔類。

回答

1

嵌套類public的外部類和private對於所有其他類...

一些參考:Nested Classes

聲明private嵌套/內部類不可見性改變外部類本身,只要將嵌套類(私有或不)作爲外部類的變量/方法。

public class Sq { 
    public int publicNumber = 0; 
    private int number = 0; 
    private class Inner { ... } 
} 

EDIT

從內部類也可以調用外部類的一些變量/方法以及以其他方式沒有問題

public class Sq { 

    private int number = 0; 

    class Inner { 
     private int a; 

     private Inner(int a1) { 
      this.a = a1; 
      number++; 
     } 

     private String getOuterClassString() 
     { 
      return getOuterString(); 
     } 

     private String getPrivateString() 
     { 
      return "privateString"; 
     } 

     public String getPublicString() 
     { 
      return "publicString"; 
     } 
    } 

    private String getOuterString() 
    { 
     return "outerString"; 
    } 

    public static void main(String[] args) { 
     Sq outter = new Sq(); 
     Inner d = outter.new Inner(3); 
     System.out.println("Number = " + outter.number); 
     System.out.println("Private a = " + d.a); 
     System.out.println("Number = " + outter.number); 

     System.out.println(d.getPrivateString()); 
     System.out.println(d.getPublicString()); 
     System.out.println(d.getOuterClassString()); 
    } 
} 
+0

所以嵌套類中的所有字段和方法都是公用的外部? – Ihor

+0

是的!這就像他們是外部類的一部分,像'私人詮釋號碼'... – Marcx

+0

哦,我看到了,非常感謝你 – Ihor

0

內部類最終意味着提供一些實用從組織角度來看外部階層。內部類完全可以被外部類訪問,因爲最終你真的不應該需要從你自己的類中獲取數據hide。當代碼的複雜性要求你將數據隱藏在getter和setter後面時,你應該認真考慮將該類放入自己的文件中的可能性。