public class Main { public static void main(String[] args) { double totalTax = 0; Income[] incomes = {new SalaryIncome(12000), new RoyaltyIncome(5000)}; for (Income income : incomes) { totalTax += income.getTax(); } System.out.println(totalTax); } } /** * 定义抽象类Income */ abstract class Income { protected double income; public Income(double income) { this.income = income; } public abstract double getTax(); } /** * 工资收入计税 */ class SalaryIncome extends Income { public SalaryIncome(double income) { super(income); } @Override public double getTax() { if (income <= 5000) { return 0; } else if (income > 5000 && income <= 10000) { return (income - 5000) * 0.1; } else { return (income - 10000) * 0.2 + 5000 * 0.1; } } } /** * 稿费收入计税 */ class RoyaltyIncome extends Income { public RoyaltyIncome(double income) { super(income); } @Override public double getTax() { return income * 0.2; } }
从练习中可以看出虽然抽象类无法实例化但还是可以有构造方法的,目的是让子类继承并调用
Sign in to make a reply
韦雪松