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; }}
Sign in to make a reply
杜甫