如何将超类构造函数的一些参数继承到子类构造函数? 例如,我只想将权重和高度继承到子类,如何为子类构造约束器?
public abstract class People {
protected double weight;
protected int height;
protected String mood;
public People(double weight, int height, String mood) {
this.weight = weight;
this.mood = mood;
}
public class Health extends People {
private String bloodType;
public Health(double weight, int height, String bloodType){
super(weight,height); // this won't work
this.bloodType = bloodType;
}
答案 0 :(得分:1)
要么你需要为超类中的构造函数提供一种情绪(可能是一个常量),或你需要将一个构造函数添加到超类中采取一种心情。你需要问自己,每个Question/People
真的是否需要情绪,以及DivisionQuestion/Health
的情绪是什么。 (对于您的代码目前在使用的类名方面不一致,这没有任何帮助。)
就像调用普通方法一样,你不能为某些参数而不是其他参数提供参数。
答案 1 :(得分:0)
你只需要重载构造函数,或者可以在超类中使用变量“mood”的默认值。尽管如此Effective Java建议使用静态工厂方法而不是重载构造函数。
答案 2 :(得分:0)
只是为了补充Jon Skeets和Harshil Sukhadias的答案。您需要两个构造函数,一个只接受height
和weight
并为mood
设置默认值,或者使用默认值调用第一个构造函数。
public abstract class People {
// ...
public static final String MOOD_DEFAULT = "Happy";
public People(double weight, int height, String mood) {
// ...
}
// second ctor, calling the first with a default for mood...
public People(double weight, int height) {
this(weight,height,Question.MOOD_DEFAULT);
}
}
public class Health extends People{
// ...
public Health(double weight, int height, String bloodType) {
super(weight,height);
// ... or super(weight,height,Question.MOOD_DEFAULT);
}
}
拥有这种类型的层次结构可能对实现构建器模式很有用,请查看Josuah Blochs“Effective Java”的第2章第2项以获取更多详细信息。