使用super()进行构造函数初始化

时间:2017-10-05 10:15:22

标签: java

我有一个带有构造函数的抽象类" A"并希望在构造函数中使用它" B"使用super()的子类。但是,我被迫在" B"中使用super();在第一行:

public class B extends A {

    // constructor B
    public B(String name){
       // cannot have this on the first line
       int age = 18;
       // constructor "A" of abstract class
       super(name, age);
    }

}

如果我在这个" B" -constructor中创建年龄,我如何在超级构造函数中传递年龄?

2 个答案:

答案 0 :(得分:2)

super必须始终是派生类的构造函数中的第一个语句。

您基本上有两个选择:

a)直接在age来电中设置super

public B(String name){
    super(name, 18);
}

您还可以进行其他(简单)计算或内联调用(静态)方法。

b)使用静态工厂方法:

public static B create(String name) {
    int age = 18;
    return new B(name, age);
}

private B(String name, int age){
    super(name, age);
}

这种方法提供了更大的自由度(因为你现在可以在调用B的构造函数之前编写语句),但如果B也是抽象的则不起作用。

不是调用B(new B("myName"))的构造函数,而是调用静态create方法(B.create("myName"))。

答案 1 :(得分:1)

您可以在构造函数中内联代码,如下所示:

public B(String name) {
    super(name, 18);
}