Tạo ứng dụng để tính toán thu nhập cho các cầu thủ bong chày. Ứng dụng gồm các lớp sau: Player: • Abstract class • Thuộc tính: Tên cầu thủ • Constructor: gán giá | Bài tập 2: Inheritance and Interfaces Tạo ứng dụng để tính toán thu nhập cho các cầu thủ bong chày. Ứng dụng gồm các lớp sau: Player: Abstract class Thuộc tính: Tên cầu thủ Constructor: gán giá trị cho Tên cầu thủ Abstract Method: displayDetail: Hiển thị tên cầu thủ Tax Interface Chứa Constant TAX_PERCENT Abstract Method: calculateTax() tính thuế thu nhập của cầu thủ PlayerIncome: Thừa kế lớp Player và thực thi (implement) lớp Tax Thuộc tính: Thu nhập của cầu thủ (income) Constructor: có hai tham số chứa tên và thu nhập của cầu thủ. o Gán giá trị cho thuộc tính thu nhập o Gọi Constructor của lớp Player để gán giá trị cho thuộc tinh tên cầu thủ Viết code(implement) cho phương thức calculateTax { return TAX_PERCENT* income; } Viết code(implement) cho phương thức displayDetail: hiện thị tên ,thu nhập và thuế thu nhập của cầu thủ xuất (name + “, income=” + income + “tax=” + calculateTax() ); GradeBonus: Interface Constant: GRADE_BONUS_PERCENT: tỉ lệ thưởng cho cầu thủ (giá trị=) Abstract method: calculateGradeBonus: tính tiền thưởng cho cầu thủ TournamentIncome: Thừa kế lớp Player và thực thi Interface GradeBonus Thuộc tính: grade (hạng cầu thủ), rate(mức đáng giá của cầu thủ ) Constructor: có ba tham số: chứa tên, hạng và đánh giá của cầu thủ: o Gán giá trị cho thuộc tính hạng, đánh giá o Gọi Constructor của lớp Player để gán giá trị cho thuộc tinh tên cầu thủ Viết code(implement) cho phương thức o calculateGradeBonus: if (grade>=2 && rate>=2) return GREAT_BONUS_PERCENT * grade; return 0; // code tự ấn định o displayDetail: xuất (name + “,Bonus=” + calculateGreatBonus()); PlayerTest: { main() { PlayerIncom p1= new PlayerIncome( “Albert”, 10000); TournamentIncome p2= new TournamentIncome (“Alberto”,3,2); (); (); } }