覆盖超类构造函数

时间:2012-07-14 19:22:43

标签: java

我有两个类: LeapYear 在其构造函数中将年份的日期分别设置为365和366。我想在这里实现一些特定的东西。我想在LeapYear的构造函数中覆盖Year的构造函数,将天数设置为366?或者我做了以下。

public class Year {

private int days;

public Year() {
    this.days = 365;
}
public void setDays(int days) {
    this.days = days;
}

public int getDays() {
    return this.days;
}

}

public class LeapYear extends Year {

public LeapYear() {
    setDays(366);
}

}

3 个答案:

答案 0 :(得分:6)

这个模型是错误的,这就是你在构造函数上遇到麻烦的原因:366天的闰年 365天的年份根本不是这样。但这就是你的模特试图告诉我们的。

你最好这样建模:

public abstract class PeriodOfDays {
   int days;
   public PeriodOfDays(int days) { this.days = days; }
}

public class StandardYear extends PeriodOfDays {
   public StandardYear() { super(365); }
}

public class LeapYear extends PeriodOfDays {
   public LeapYear() { super(366); }
}

答案 1 :(得分:2)

为什么不添加一个受保护的构造函数来接受它?

public class Year {

private int days;

protected Year(int days) {
   this.days = days;
}

public Year() {
    this(365);
}

public int getDays() {
    return this.days;
}
}

public class LeapYear extends Year {

public LeapYear()  {
  super(366);
}

答案 2 :(得分:0)

可能会改善Daniel的建议,因为year.setDays()感觉非常“错误”。使公共构造函数具有final字段天数。 e.g。

public class Year {

private final int days;

protected Year(int days) {
   this.days = days;
}

public Year() {
   this(365);
}


public class LeapYear extends Year {

public LeapYear()  {
  super(366);
}

}

注意:我同意@Andreas_D,这整个方法都是可疑的......