1

私には2つのクラスがあります。コンストラクター内で年の日をそれぞれ365と366に設定するYearLeapYearです。ここで特定の何かを達成したいのですが、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フィールド日でパブリックコンストラクターを作成します。例えば

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 に答える