0
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();

什么给了?类如何同时是静态和非静态的?

4

1 回答 1

5

static在这种情况下,与字段和方法的含义不同。

静态嵌套类是不需要创建任何外部类实例的类。

非静态嵌套类需要创建其外部类的实例,并且具有对该实例的隐式引用(可TheNameOfTheOuterClass.this在内部类中使用)。

静态内部类通常用于避免在仅由一个类使用时将类暴露给外部,或者让一个类能够访问外部类的私有字段和方法,或者将一个类的范围限定为另一个类,因为它与它紧密相连。

于 2012-11-18T21:41:32.723 回答