package Test; abstract class TaxCalculator { protected double income; public TaxCalculator(double income) { this.income = income; } public abstract double calculateTax(); public double afterTaxIncome() { return income - calculateTax(); } } class FlatTaxCalculator extends TaxCalculator { private static final double RATE = 0.15; public FlatTaxCalculator(double income) {super(income);} public double calculateTax() { return income * RATE; } } public class TaxApp { static class BracketTaxCalculator extends TaxCalculator { public BracketTaxCalculator(double income) { super(income); } public double calculateTax() { if (income <= 10000) {return income * 0.10;} else if (income <= 50000) { return (10000 * 0.10) + ((income - 10000) * 0.20);} else { return (10000 * 0.10) + (40000 * 0.20) + ((income - 50000) * 0.30);} } } public static void main(String[] args) { double income = 60000; TaxCalculator flat = new FlatTaxCalculator(income); double flatTax = flat.calculateTax(); double flatAfterTax = flat.afterTaxIncome(); TaxCalculator bracket = new BracketTaxCalculator(income); double bracketTax = bracket.calculateTax(); double bracketAfterTax = bracket.afterTaxIncome(); } }