2012-07-14 120 views
1

我有兩個類: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); 
} 

}

回答

6

的模式是錯誤的,這就是爲什麼你有構造函數的麻煩:這是不正確的,一個366天,閏年是,一個 365天一年。但這就是你的模型試圖告訴我們的。

你最好的IT模式那樣:

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); } 
} 
+0

我會建立在那個Andreas_D謝謝 – 2012-07-14 19:41:44

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); 
} 
+0

''超(ARG)''覆蓋構造函數的參數''從基類arg'',在這裏:' 'Year''。 – doniyor 2012-07-14 19:30:47

+0

丹尼爾,這正是我想要做的。謝謝:) – 2012-07-14 19:40:03

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,這整個的做法是值得懷疑......

+0

你爲什麼要使用final.Just想知道。 – 2012-07-14 19:46:32