我有一个关于控件如何在基类和子类构造函数之间流动的基本问题。看看这个片段。
public class Base{
public Base(Object obj){
System.out.println("Super constructor");
}
}
public class Child{
super(new Object obj(){
@Override
public void create(){
System.out.println("Inside Super call in child constructor");
}
});
System.out.println("Inside child constructor");
}
邮件的打印顺序是什么? 我正在
Super constructor
Inside Super call in child constructor
Inside child constructor
为什么在超级调用中创建内联对象之前会调用超级构造函数?
答案 0 :(得分:0)
首先,您的代码中存在许多错误
假设您正在询问super
调用将如何执行,我将发布此问题的答案。
public class Base {
public Base(Object obj){
System.out.println("Super constructor");
}
}
class Child extends Base {
public Child(Object obj) {
super(obj);
System.out.println("Inside Child Constructor");
}
public static void main(String[] args) {
Child myChild = new Child("Object");
}
}
将输出改为:
Super constructor
Inside Child Constructor
创建类层次结构时,类的构造函数的顺序是什么
弥补执行的层次结构?例如,给定一个名为B的子类和一个超类
叫A,是A的构造函数在B之前执行,反之亦然?答案是在课堂上
层次结构,构造函数按照派生的顺序完成它们的执行,从超类到
子类。此外,因为super( )
必须是在子类中执行的第一个语句'
构造函数,无论是否使用super( )
,此顺序都相同。如果未使用super( )
,
然后将执行每个超类的默认或parameterless
构造函数。
在你的情况下:
只要使用myChild
关键字创建了Child对象new
,就会调用其构造函数。在child
类构造函数中,您将显式调用super(obj)
,该调用将调用base
类的构造函数。这导致首先打印Base类的语句,然后打印Child
Class。