Java类构造函数和super()和控制流

时间:2015-12-06 11:25:58

标签: java inheritance

我有一个关于控件如何在基类和子类构造函数之间流动的基本问题。看看这个片段。

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

为什么在超级调用中创建内联对象之前会调用超级构造函数?

1 个答案:

答案 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。

的内容