我有一个带有构造函数的抽象类" 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中创建年龄,我如何在超级构造函数中传递年龄?
答案 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);
}