Video: [Java] - Bài 48: Superclasses and subclasses. 2025
Khi bạn viết một chương trình hướng đối tượng trong Java, bạn bắt đầu bằng cách suy nghĩ về dữ liệu. Bạn đang viết về các tài khoản. Vì vậy, một tài khoản là gì? Bạn đang viết mã để xử lý các nút bấm. Vì vậy, một nút là gì? Bạn đang viết một chương trình để gửi bảng lương cho nhân viên. Một nhân viên là gì?
Trong ví dụ này, nhân viên là người có tên và chức danh công việc. Chắc chắn, nhân viên có các đặc điểm khác, nhưng bây giờ dính vào những điều cơ bản. Mã trong danh sách này xác định ý nghĩa của việc trở thành một nhân viên.
nhập tĩnh java. lang. Hệ thống. ngoài; nhân viên lớp công cộng {private String name; tư nhân String jobTitle; public void setName (String nameIn) {name = nameIn;} public String getName () {return name;} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn;} public String getJobTitle () {return jobTitle;} public void cutCheck (gấp đôi số tiềnPaid) {out. printf ("Thanh toán theo thứ tự% s", tên); ngoài. printf ("(% s) *** $", jobTitle); ngoài. printf ("%,.2fn", amountPaid);}}
Trong danh sách, một lớp Employee được định nghĩa. Bạn có thể sử dụng những gì bạn định nghĩa ở đây và mở rộng định nghĩa để tạo các lớp học mới, chuyên biệt hơn. Vì vậy, trong danh sách tiếp theo này, bạn xác định một lớp mới - một lớp FullTimeEmployee.
lớp công khai FullTimeEmployee mở rộng nhân viên {private double weeklySalary; tư nhân gấp đôi khấu trừ; public void setWeeklySalary (double weeklySalaryIn) {weeklySalary = weeklySalaryIn;} public double getWeeklySalary () (return weeklySalary;} public void setBenefitDeduction (lợi ích gấp đôi) {benefitDeduction = benefitDedIn;} public double getBenefitDeduction () {trả lại lợi íchDeduction;} public double findPaymentAmount () {return weeklySalary - benefitDeduction;}}
Nhìn vào danh sách, bạn có thể thấy rằng mỗi instance của lớp FullTimeEmployee có hai trường: weeklySalary và benefitDeduction. Nhưng liệu có phải là những trường duy nhất mà mỗi cá thể FullTimeEmployee có? Không, họ không.
Dòng đầu tiên nói rằng lớp FullTimeEmployee mở rộng lớp Employee hiện có. Điều này có nghĩa là ngoài việc có Weekly và một benefitDeduction, mỗi cá thể FullTimeEmployee cũng có hai trường khác: name và jobTitle. Hai trường này đến từ định nghĩa của lớp Employee, mà bạn có thể tìm thấy trong danh sách đầu tiên.
Trong danh sách thứ hai, từ ma thuật kéo dài . Khi một lớp mở rộng một lớp hiện có, lớp mở rộng tự động kế thừa các chức năng được định nghĩa trong lớp hiện có.Vì vậy, lớp FullTimeEmployee kế thừa các trường tên và jobTitle.
Lớp FullTimeEmployee cũng kế thừa tất cả các phương thức được khai báo trong lớp Employee - setName, getName, setJobTitle, getJobTitle và cutCheck. Lớp FullTimeEmployee là một lớp con của lớp Employee.
Điều đó có nghĩa là lớp Employee là lớp superclass của lớp FullTimeEmployee. Bạn cũng có thể nói về thân nhân máu. Lớp FullTimeEmployee là child của lớp Employee, và lớp Employee là parent của lớp FullTimeEmployee.
Gần như (nhưng không hoàn toàn) như thể lớp FullTimeEmployee được định nghĩa bởi mã trong danh sách này. Mã này là giả, nhưng thông tin.
nhập tĩnh java. lang. Hệ thống. ngoài; lớp công khai FullTimeEmployee {private String name; tư nhân String jobTitle; cá nhân đôi tuầnSalary; tư nhân gấp đôi khấu trừ; public void setName (String nameIn) {name = nameIn;} public String getName () {return name;} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn;} public String getJobTitle () {return jobTitle;} public void setWeeklySalary (hai tuầnSalaryIn) {weeklySalary = weeklySalaryIn;} public double getWeeklySalary () {return weeklySalary;} public void setBenefitDeduction (lợi ích gấp đôi) {benefitDeduction = benefitDedIn;} public double getBenefitDeduction () {return benefitsDeduction;} public double tìm thấyPaymentAmount () {return weeklySalary - benefitDeduction;} public void cutCheck (số tiền gấp đôiPaid) {out. printf ("Thanh toán theo thứ tự% s", tên); ngoài. printf ("(% s) *** $", jobTitle); ngoài. printf ("%,.2fn", amountPaid);}}
Tại sao mã giả mạo này là danh sách? Vâng, sự khác biệt chính giữa danh sách này và tình hình thừa kế trong các danh sách trước đó là: Một lớp con không thể trực tiếp tham chiếu các trường tư nhân của lớp cha mẹ của nó. Để làm bất cứ điều gì với các trường riêng tư của lớp phụ huynh, lớp con phải gọi các phương thức accessor của lớp phụ huynh.
Trở lại danh sách thứ hai, gọi setName ("Rufus") sẽ hợp pháp, nhưng tên mã là "Rufus" sẽ không được. Nếu bạn tin mọi thứ bạn đọc trong danh sách cuối cùng, bạn sẽ nghĩ rằng mã trong lớp FullTimeEmployee có thể làm name = "Rufus". Vâng, nó không thể.
Bạn không cần Employee. java trên ổ cứng của bạn để viết mã mở rộng lớp Employee. Tất cả những gì bạn cần là File Employee. lớp học.