Ôn tập: Phân cấp lớp Employee
Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 27 trên 87.
Thử thách
DễHãy cùng xây dựng một hệ thống phân cấp nhân viên hoàn chỉnh, kết hợp tất cả khái niệm về kế thừa (inheritance) trong chương này. Bạn sẽ tạo một cơ cấu công ty, trong đó các loại nhân viên khác nhau có chung thuộc tính nhưng sở hữu những hành vi chuyên biệt riêng.
Bạn sẽ sắp xếp code trong bốn tệp:
Employee.java: Tạo lớp cơ sở mà mọi nhân viên đều dùng chung. Mỗi nhân viên có tên và mức lương. Thêm hàm khởi tạo (constructor) để khởi tạo cả hai trường, cùng phương thức (method)getDetails()trả về:[name] earns $[salary]. Thêm phương thứcwork()để in ra:[name] is working.Manager.java: Tạo một lớp kế thừa từ Employee. Người quản lý có thêm trườngteamSize, thể hiện số người họ quản lý. Dùngsuperđể xử lý việc khởi tạo lớp cha. Ghi đè phương thứcwork()để in ra:[name] is managing a team of [teamSize]. Thêm phương thứcgetManagerDetails()trả về:Manager: [name] earns $[salary], Team size: [teamSize].Developer.java: Tạo một lớp khác kế thừa từ Employee. Lập trình viên có trườnglanguageđể lưu ngôn ngữ lập trình chuyên môn của họ. Một lần nữa, hãy dùngsupercho phần thuộc lớp cha. Ghi đèwork()để in ra:[name] is coding in [language]. Thêm phương thứcgetDeveloperDetails()trả về:Developer: [name] earns $[salary], Language: [language].Main.java: Kết hợp mọi thứ tại đây. Bạn sẽ nhận năm đầu vào: tên nhân viên, mức lương, số người trong nhóm của người quản lý, một tên khác và ngôn ngữ lập trình của lập trình viên. Tạo một Manager và một Developer, sau đó gọi phương thức thông tin chi tiết chuyên biệt của từng người, rồi gọi phương thứcwork()của họ.
Bạn sẽ nhận năm đầu vào theo thứ tự này: tên người quản lý (String), mức lương của người quản lý (double), số người trong nhóm (int), tên lập trình viên (String) và ngôn ngữ lập trình (String). Dùng mức lương 75000.0 cho lập trình viên.
Định dạng mọi mức lương với 2 chữ số thập phân bằng String.format("%.2f", salary). Đầu ra cần có tổng cộng bốn dòng: thông tin chi tiết và hành vi làm việc của người quản lý, tiếp theo là thông tin chi tiết và hành vi làm việc của lập trình viên.
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Đọc dữ liệu đầu vào
String managerName = scanner.nextLine();
double managerSalary = scanner.nextDouble();
int teamSize = scanner.nextInt();
scanner.nextLine(); // Đọc ký tự xuống dòng còn lại
String developerName = scanner.nextLine();
String language = scanner.nextLine();
// Lương của Developer cố định ở mức 75000.0
double developerSalary = 75000.0;
// TODO: Tạo đối tượng Manager với managerName, managerSalary và teamSize
// TODO: Tạo đối tượng Developer với developerName, developerSalary và language
// TODO: In ra thông tin của manager bằng getManagerDetails()
// TODO: Gọi phương thức work() của manager
// TODO: In ra thông tin của developer bằng getDeveloperDetails()
// TODO: Gọi phương thức work() của developer
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online