在将非静态内部类更改为静态时,为什么运行代码时出现编译时错误 -
非法附上实例规范
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在对象上调用它们,它们的工作不会显示编译失败。那么为什么编译失败?
答案 0 :(得分:1)
如果内部类是非静态的,那么您需要外部类的实例来创建内部类的实例。但是静态类不是这种情况,内部静态类的实例可以在没有外部类的实例的情况下存在。
静态示例:
InnerClass ic = new Outer.InnerClass();
注意我没有创建外部类的新实例。
编辑:reference