cha*_*itu 7 java constructor inner-classes
我想知道是否有任何构造函数涉及内部类.例如,考虑下面给出的代码片段
class MyOuter
{
private int x= 10;
class MyInner
{
void dostuff(){
System.out.println("The value of x is "+x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个java文件中,我为MyOuter和MyInner类创建实例,如下所示
Class Program
{
public static void main(String [] args)
{
MyOuter mo = new MyOuter();
MyOuter.MyInner mi = mo.new MyInner();
mi.dostuff();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段编译得很好并且输出"x的值是10".
我想知道的是当new()与MyInner类和MyOuter类一起使用时是否调用构造函数.如果是,那么是否有任何构造函数从内部类链接到外部类(如子类调用超类的构造函数,依此类推).
das*_*h1e 12
扩展内部类时,可以观察内部类的构造函数链.
举个例子:
public class MainClass {
public MainClass(String value) {
System.out.println("mainValue: " + value);
}
public class NestedClass {
public NestedClass(String nestedValue) {
System.out.println("nestedValue: " + nestedValue);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样扩展NestedClass
public class NestedClassExtension extends NestedClass {
public NestedClassExtension(MainClass mainClass, String nestedValue) {
mainClass.super(nestedValue);
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,你可以到你的嵌套类传球的超级构造函数中调用该构造函数MainClass,并呼吁.super对mainClass对象实例.
现在,您可以通过以下方式创建NestedClassExtension实例:
NestedClassExtension extension = new NestedClassExtension(new MainClass("main"), "nested");
Run Code Online (Sandbox Code Playgroud)
所以主类必须存在,并且它的构造函数首先被调用.然后是嵌套类的构造函数.
相反,如果你想NestedClass在MainClass你必须写的外面创建一个实例:
MainClass mc = new MainClass("main");
mc.new NestedClass("nested");
Run Code Online (Sandbox Code Playgroud)
另一次,MainClass必须首先创建,然后是嵌套类.
| 归档时间: |
|
| 查看次数: |
23374 次 |
| 最近记录: |