第10章-内部类_new

第10章--内部类_.new
package innerclasses;


class SS
{
  public SS()
  {
    DotNew dn = new DotNew();
    //DotNew.Inner di = dn.new Inner();
    //如果其他类的内部类的构造函数是private的,
    //则只有在这个内部类的外部类中可以使用这个内部类,
    //其他类是不能实例化这个内部类的
    
    //DotNew.Inner di = dn.new Inner2(); //这样也不行,因为内部类Inner2是private的
  }
}
public class DotNew
{
  public class Inner
  {
    private Inner()
    {
      
    }
  }
  
  private class Inner2
  {
    public Inner2()
    {
      
    }
  }

  public static void main(String[] args)
  {
    DotNew dn = new DotNew();
    DotNew.Inner dni = dn.new Inner(); 
    //直接创建 (普通,非static)内部类的对象 必须要有一个外部类对象
    //这里 声明dni变量时,变量类型 不需要使用DotNew.Inner 可以直接使用Inner
    Inner iInner = dn.new Inner();
    innerclasses.Inner ii = new innerclasses.Inner();
    //当一个类A 和 B在同一个包里面,并且类B有个内部类也叫A,
    //此时如果使用类A,需要用 包名.A的方式
    //就像上面的那样
  }
}

 

同一个包内的,与内部类同名的类

 

package innerclasses;

public class Inner
{
  public Inner()
  {
    System.out.println("和内部类Inner同名的,同一个包下面的Inner");
  }
}