Constructors of non static member classes take an extra hidden parameter which is a reference to an instance of the immediately enclosing class. There is also a syntactic extension of 'new'.
In the below code,
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();
}
Can you please help me understand the meaning of Kb() in K.Ka.Kb().new Kc().new Kd()? I understand that new Kc() is required as told in first paragraph.
-
1only if you bothered reading thisQuakeCore– QuakeCore2015年09月08日 14:52:39 +00:00Commented Sep 8, 2015 at 14:52
3 Answers 3
The parentheses you point out actually do not apply to Kb but K.Ka.Kb.
new K.Ka.Kb()
is creating a new instance of the K.Ka.Kb nested class.
3 Comments
(new K.Ka.Kb()).new Kc().new Kd();?kc and kd are inner class. But the idiom of saying non static member class as inner class, is it a standard jargon?It's calling the constructor of Kb. It's easier to show this in three statements:
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
Comments
Kb() is the default constructor for class Kb. It is what relates to the first new of the line:
- you are creating a new instance of
Kb(classK.Ka.Kbactually ; depending on the context you may omitK.Ka.) - on which you are calling
new Kc()for creating a new instance ofKc - on which you are calling
new Kd()for creating a new instance ofKd