Discuss / Java / 使用抽象类计算个税

使用抽象类计算个税

Topic source

杜甫

#1 Created at ... [Delete] [Delete and Lock User]
package Tax;/** * 收入基类 * 通过abstract定义的方法是抽象方法,它只有定义,没有实现。抽象方法定义了子类必须实现的接口规范; * 定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法; * 如果不实现抽象方法,则该子类仍是一个抽象类; * 面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现 * 抽象类不能被实例化,它是来被继承用的,这个和final是相反的 */public abstract class Income {    //收入    protected double income;    /**     * 添加抽象方法     */    public abstract void run();    //获得税费    public abstract double getTax();    //构造函数设置收入内容    public Income(double income) {        this.income = income;    }}
package Tax;public class LessTax extends Income {    /**     * 构造函数     * 继承父类时,子类构造函数一定要实现     * @param income double 收入     */    public LessTax(double income) {        super(income);    }    @Override    public void run() {        System.out.println("少于5000元工资的个税计算");    }    @Override    public double getTax() {        return this.income * 0.1;    //收入    }}
package Tax;/** * 免税类,享受国务院特殊津贴的 */public class FreeTax extends Income {    @Override    public void run() {        System.out.println("这是免税类!");    }    /**     * 构造函数复制     * @param income double     */    public FreeTax(double income) {        super(income);    }    @Override    public double getTax() {        return 0;    }}
package Tax;/** * 工资收入继承自基础类 */public class Salary extends Income {    @Override    public void run() {        System.out.println("这是工资收入类");    }    /**     * 构造函数     * @param income double 收入     */    public Salary(double income) {        super(income);    }    @Override    public double getTax() {        if (this.income <= 5000) {  //小于5000元不交税            return 0.0;        }        //大于5000元暂时按20%税来计算        return (this.income - 5000) * 0.2;    }}
import Tax.FreeTax;import Tax.Income;import Tax.LessTax;import Tax.Salary;/** * 重写(override)的应用实例 */public class HeavyWrite {    public static void main(String[] args) {        //给一个有普通、工资收入和享受国务院特殊津贴的小伙伴算税:        //向上转型将各种收入类放入数组中,主要为了计算总税费的数据源        Income[] incomes = {                new LessTax(3000),   //基本收入                new Salary(10000),   //工资收入                new FreeTax(15000), //特殊津贴        };        double totalTax = totalTax(incomes);        System.out.println("总得税费:"+totalTax);    }    /**     * 申报所有税     * @param incomes Income... 税的对象     * @return double     */    public static double totalTax(Income... incomes) {        double total=0;        //调用多个对象的税费        for (Income income: incomes) {            income.run();            total += income.getTax();        }        return total;    }}

  • 1

Reply