1

我有两个类:YearLeapYear在它们的构造函数中分别将一年中的天数设置为 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);
}

}

4

3 回答 3

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); }
}
于 2012-07-14T19:31:12.673 回答
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);
}
于 2012-07-14T19:25:10.537 回答
0

可能对丹尼尔的建议有所改进,因为year.setDays()感觉很“错误”。final使用字段 days制作公共构造函数。例如

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 的观点,即整个方法都是可疑的......

于 2012-07-14T19:33:17.040 回答