【问题标题】:How the keyword 'new' works especially when I initiate static nested class? [duplicate]关键字“new”是如何工作的,尤其是当我启动静态嵌套类时? [复制]
【发布时间】:2015-11-21 12:00:29
【问题描述】:
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 的工作原理。

【问题讨论】:

    标签: java nested


    【解决方案1】:

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

    另一方面,静态类没有关联的外部实例,所以你通常只需用new指定类名(实际上你可以直接导入嵌套类,然后你可以直接说@ 987654323@).

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2012-01-02
      • 2011-01-09
      • 2015-08-06
      • 1970-01-01
      • 2019-12-07
      • 2020-02-16
      • 2011-08-17
      • 2013-03-20
      相关资源
      最近更新 更多