关键字' new'特别是当我启动静态嵌套类时?

时间:2015-11-21 12:00:29

标签: java nested

public class NestedClassTest {
    public static void main(String[] args){
        OuterClass.NestedClass nestedObject = new OuterClass.NestedClass();
        nestedObject.printX();

        OuterClass outerObject = new OuterClass();
        //OuterClass.InnerClass innerObject = new outerObject.InnerClass(); //Error!
        OuterClass.InnerClass innerObject = outerObject.new InnerClass();
        innerObject.printY();

        //OuterClass.NestedClass objectOfNested2 = outerObject.new NestedClass(); //Error!
    }
}

class OuterClass{
    static int x = 10;
    int y = 100;

    static class NestedClass{
        void printX(){
        System.out.println(x);
        }
    }

    class InnerClass{
        void printY(){
            System.out.println(y);
        }
    }
}

我正在玩嵌套类和内部类。困难的部分是当我尝试使用关键字new启动内部类时。

我希望new outerObject.InnerClass()可以正常工作 new OuterClass.NestedClass()做到了。它没有用,只有outerObject.new InnerClass()有效。对我而言,关键字new位于变量之后(在我的情况下为outerObject)似乎非常令人毛骨悚然和令人困惑。为什么要这样?这背后的逻辑是什么?

此外,outerObject.new NestedClass()没有效果,这对我来说意味着更多的谜团。

请有人帮我理解关键字new的详细信息。

1 个答案:

答案 0 :(得分:1)

内部类的实例属于外部类的特定实例(这是使它与静态嵌套类不同的原因)。你必须说outerInstance.new InnerClass()来告诉Java哪个外部实例。

另一方面,静态类没有关联的外部实例,因此您只需通常使用new指定类名(实际上,您可以直接导入嵌套类,然后您就可以了说new NestedClass())。