Java 使用构造函数创建新对象

Java 使用构造函数创建新对象,java,constructor,scjp,Java,Constructor,Scjp,以下代码在编译和运行时将输出为“alpha subsubsub”。 subsubsubalpha()构造函数应该向变量s添加“subsub”,这应该是输出 为什么输出是“alpha subsub” 这是因为当您创建对象时,会调用父对象的构造函数,并将其转到对象类。Alpha在内部扩展对象类。所以调用了第一个SubSubAlpha构造函数,它调用了Alpha构造函数,Alpha构造函数又调用了对象构造函数,执行从对象流到Alpha,最后是subsubsubalpha 获取信息 构造函数调用层次结构

以下代码在编译和运行时将输出为“alpha subsubsub”。
subsubsubalpha()构造函数应该向变量
s
添加“subsub”,这应该是输出

为什么输出是“alpha subsub”


这是因为当您创建对象时,会调用父对象的构造函数,并将其转到对象类。Alpha在内部扩展对象类。所以调用了第一个SubSubAlpha构造函数,它调用了Alpha构造函数,Alpha构造函数又调用了对象构造函数,执行从对象流到Alpha,最后是subsubsubalpha

获取信息
构造函数调用层次结构是调用父级的构造函数,然后调用子级的构造函数。但是,如果调用一个方法,它将在子类中搜索。如果在子类中找不到该方法,则在父类中搜索该方法

参考

这是因为在创建对象时,会调用父对象的构造函数,并将其转到对象类。Alpha在内部扩展对象类。所以调用了第一个SubSubAlpha构造函数,它调用了Alpha构造函数,Alpha构造函数又调用了对象构造函数,执行从对象流到Alpha,最后是subsubsubalpha

获取信息
构造函数调用层次结构是调用父级的构造函数,然后调用子级的构造函数。但是,如果调用一个方法,它将在子类中搜索。如果在子类中找不到该方法,则在父类中搜索该方法

参考

调用子类的构造函数时,第一条指令是调用超类构造函数


因此,当您创建一个
subsubsubalpha
对象时,
Alpha
构造函数将Alpha添加到
s
属性,然后
subsubsubalpha
constructor添加subsubsub

当调用子类的构造函数时,第一条指令是调用超类构造函数


因此,当您创建一个
subsubsubalpha
对象时,
Alpha
构造函数将Alpha添加到
s
属性,然后
subsubsubalpha
constructor添加subsubsub

让我稍微重写一下您的构造函数,结果字节码不变:


现在应该立即清楚执行的内容和顺序。

让我稍微重写一下您的构造函数,而不会更改生成的字节码:


现在,应该立即弄清楚执行的是什么以及执行的顺序。

当存在类的层次结构时,子类的构造函数(在本例中为
subsubsubalpha
)总是(首先)调用超类的构造函数,在本例中为
Alpha

因此,实际情况是:

private SubSubAlpha() { 
    super();
    s += "subsub ";
}
因此,这使得:

s += "alpha ";
s += "subsub ";

当存在类的层次结构时,使字符串“alpha subsubsub”成为子类的构造函数(在本例中为
subsubsubalpha
),总是(首先)调用超类的构造函数(在本例中为
alpha

因此,实际情况是:

private SubSubAlpha() { 
    super();
    s += "subsub ";
}
因此,这使得:

s += "alpha ";
s += "subsub ";

使字符串“alpha subsub”

扩展alpha类,因此首先调用该类的构造函数。扩展alpha类,因此首先调用该类的构造函数。