2012-07-14 112 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