Discuss / Java / 报税的那个例子很难受

报税的那个例子很难受

Topic source

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)

        };

刚刚发完评论,看到了下一章 抽象类 …………没事儿了。


  • 1

Reply