Salary不是StateCouncilSpecialAllowance,所以Salary.getTax()与StateCouncilSpecialAllowance.getTax()不相同,这无可厚非。
但是,既然Salary是Income,StateCouncilSpecialAllowance也是Income,但Salary.getTax()与StateCouncilSpecialAllowance.getTax()却和Income.getTax()不相同,这就很怪。
其实Income.getTax()就只是一个placeholder的话,那说得通;但如果一个placeholder被拿来用就觉得哪里不太对劲了。
如果让我来写的话,我会修改Income类,然后再加一个类。
class Income {
protected double income;
public Income(double income) {
this.income = income;
}
public double getTax() {
return Income / 0; //直接用Income类的话会强制报错
class 既不是Salary也不是Alloance的Income extends Income {
return income * 0.1; // 税率10%
基于此,
Income[] incomes = new Income[] {
new 既不是Salary也不是Alloance的Income(3000),
new Salary(7500),
new StateCouncilSpecialAllowance(15000)
};
刚刚发完评论,看到了下一章 抽象类 …………没事儿了。
Sign in to make a reply
服饰店钨丝
Salary不是StateCouncilSpecialAllowance,所以Salary.getTax()与StateCouncilSpecialAllowance.getTax()不相同,这无可厚非。
但是,既然Salary是Income,StateCouncilSpecialAllowance也是Income,但Salary.getTax()与StateCouncilSpecialAllowance.getTax()却和Income.getTax()不相同,这就很怪。
其实Income.getTax()就只是一个placeholder的话,那说得通;但如果一个placeholder被拿来用就觉得哪里不太对劲了。
如果让我来写的话,我会修改Income类,然后再加一个类。
class Income {
protected double income;
public Income(double income) {
this.income = income;
}
public double getTax() {
return Income / 0; //直接用Income类的话会强制报错
}
}
class 既不是Salary也不是Alloance的Income extends Income {
protected double income;
public double getTax() {
return income * 0.1; // 税率10%
}
}
基于此,
Income[] incomes = new Income[] {
new 既不是Salary也不是Alloance的Income(3000),
new Salary(7500),
new StateCouncilSpecialAllowance(15000)
};