非静态成员类的构造函数采用额外的隐藏参数,该参数是对直接封闭类的实例的引用。还有一个新的'的语法扩展。
在下面的代码中,
class K{
static class Ka{
static class Kb{
class Kc{
class Kd{
}
}
}
}
}
class Test{
K.Ka.Kb.Kc.Kd k = new K.Ka.Kb().new Kc().new Kd();
}
能帮助我了解Kb()
中K.Ka.Kb().new Kc().new Kd()
的含义吗?我理解第一段中要求new Kc()
是必需的。
答案 0 :(得分:7)
您指出的括号实际上不适用于Kb
,而是K.Ka.Kb
。
new K.Ka.Kb()
正在创建K.Ka.Kb
嵌套类的新实例。
答案 1 :(得分:3)
它正在调用Kb
的构造函数。在三个陈述中更容易显示:
K.Ka.Kb x1 = new K.Ka.Kb();
K.Ka.Kb.Kc x2 = x1.new Kc(); // Pass x1 as the hidden constructor arg
K.Ka.Kb.Kd.Kd k = x2.new Kd(); // Pass x2 as the hidden constructor arg
答案 2 :(得分:1)
Kb()
是类Kb
的默认构造函数。这与该行的第一个new
有关:
Kb
的新实例(实际上是K.Ka.Kb
级;视情况而定,您可以省略K.Ka.
)new Kc()
来创建Kc
new Kd()
来创建Kd