我现在有个疑惑,不明白怎么回事儿为什么有的能实例化成功,有的却不能???class Outer {    class Inner {    }    public Inner getInner() {
    
        return new Inner();  //为什么这里能直new出来??
    }
    public static void main(String[] args) {
  
        Outer outer = new Outer();
        Inner inner = outer.new Inner();  //  内部类实例化成功        Inner inner = outer.getInner();  //内部类实例化成功        Inner inner  = new Inner();      //内部类实例化不成功!!!
        Outer.Inner inner  = new Outer.Inner();  //为什么提示  Outer.Inner()  这句话出错???
        
    }
}

解决方案 »

  1.   

    因为Inner是需要依赖于Outer的实例来创建的。因为Inner中的代码是可以使用Outer的成员变量和方法的
    如果Inner是static的才可以new Inner()
      

  2.   

    Inner inner  = new Inner();      //内部类实例化不成功!!! 
    Inner属于Outer的内部类,所以Inner要实例话的前提是要产生Outer的对象,如果外部对象都没产生,怎么可能有产生里面的对象呢。
    Outer.Inner inner  = new Outer.Inner();  //为什么提示  Outer.Inner()  这句话出错???
    这里出错也是因为没Outer对象,除非你的Inner声明成static,那样Inner就属于Outer类所有,而不是某个对象