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