将内部类更改为静态时编译失败

时间:2015-05-07 13:12:23

标签: java static inner-classes

在将非静态内部类更改为静态时,为什么运行代码时出现编译时错误 -

  

非法附上实例规范

public class TestingInnerStatic{  
   public static void main(String args[]) {
       InnerSame innerSame       = new TestingInnerStatic().new InnerSame();//compile fail
       Outer.InnerDiff innerDiff = new Outer().new InnerDiff();//compile fail
       } 
   public void main() {
       InnerSame innerSame       = new InnerSame();
       Outer.InnerDiff innerDiff = new Outer().new InnerDiff();//compile fail
   }
   static class InnerSame{}

}

class Outer{
    static class InnerDiff{}
}

以其他成员为例,这只是一个约定和一个好习惯,在类的引用上调用静态成员,但如果U在对象上调用它们,它们的工作不会显示编译失败。那么为什么编译失败?

1 个答案:

答案 0 :(得分:1)

如果内部类是非静态的,那么您需要外部类的实例来创建内部类的实例。但是静态类不是这种情况,内部静态类的实例可以在没有外部类的实例的情况下存在。

静态示例:

InnerClass ic = new Outer.InnerClass();

注意我没有创建外部类的新实例。

编辑:reference