2016-01-20 132 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后面时,你应该认真考虑将该类放入自己的文件中的可能性。