new A().new B()这个是什么 Java 语法

2022-11-17 19:06:16 +08:00
 movq
class Outer {

    class Inner {
        void print() {
            System.out.println("Inner printing");
        }
    }


    public static void main(String[] args) {
        (new Outer().new Inner()).print();
    }
}

有没有大佬解释一下(new Outer().new Inner()这个步骤具体发生了些什么内容呢?

1949 次点击
所在节点    程序员
12 条回复
ysc3839
2022-11-17 19:09:29 +08:00
我不懂 Java ,猜测 Inner 是可以用 Outer 里的变量的,所以要在一个 Outer 实例上 new Inner 。
westoy
2022-11-17 19:10:37 +08:00
镶嵌类, 本质就是
Outer class_ = new Outer();
Outer.Inner inner = class_.new Inner();
inner.print();
biubiuF
2022-11-17 19:11:27 +08:00
返回了一个类的内部类对象
movq
2022-11-17 19:12:16 +08:00
@westoy `class_.new Inner();`这种语法叫什么呢
yty2012g
2022-11-17 19:17:25 +08:00
实例化内部非静态类
mango88
2022-11-17 19:18:19 +08:00
看一下 内部类 相关的概念定义呗
westoy
2022-11-17 19:19:02 +08:00
@movq

你可以搜 Nested Classes
yuanmomo
2022-11-17 19:27:22 +08:00
我觉得你在监控我,前天我刚看到新公司的代码,然后问了我朋友,今天你就来。
XXWHCA
2022-11-18 13:38:20 +08:00
实例话非静态内部类之前需要先实例化它的外部类对象,非静态内部类的会有一个默认的构造方法,参数就是外部类对象。
fiveStarLaoliang
2022-11-18 15:33:12 +08:00
你的内部类非 static, 如果是 static 的就可以 new Out.Inner() 直接 new 出来了
e7
2022-11-18 16:22:43 +08:00
一般用于拆类吧,内部类不能独立存在
season8
2022-11-18 18:04:06 +08:00
@ysc3839 还说你不懂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896017

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX