public class MyClass {
public int myclassMember=NestedClass.nestedclassMember; //Compiler error,static reference to a non-static field
public static class NestedClass {
public int nestedclassMember=myclassMember; //Compiler error,static reference to a non-static field.
public NestedClass() {
}
}
}
但与此同时,在删除编译时错误后,以下内容完全合法 -
MyClass.NestedClass nestedInstance= new MyClass.NestedClass();
什么给出?同时该类如何既是静态的又是非静态的?
答案 0 :(得分:5)
static
在这个上下文中并不意味着它与字段和方法的含义相同。
静态嵌套类是一个不需要创建任何外部类实例的类。
非静态嵌套类需要创建其外部类的实例,并且具有对此实例的隐式引用(在内部类中使用TheNameOfTheOuterClass.this
可用)。
静态内部类通常用于避免在仅由一个类使用类时将类暴露给外部,或者使类能够访问外部类的私有字段和方法,或者将类的范围限定为另一个,因为它与它紧密相连。