JavaScript cũng hỗ trợ tính kế thừa (inheritance) như các ngôn ngữ khác, để tạo một lớp kế thừa, bạn sử dụng từ khóa extends
.
class SinhVien extends ConNguoi {...}
Kế thừa cho chúng ta khả năng sử dụng lại code đã viết.
Sử dụng lại các thuộc tính và phương thức của một lớp có sẵn khi tạo một lớp mới giúp chúng ta tiết kiệm thời gian làm việc.
Một lớp được kế thừa từ lớp cha sẽ có tất cả tác phương thức từ lớp cha.
Ví dụ: Ta có một lớp ConNguoi
và một lớp SinhVien
được kế thừa từ lớp ConNguoi
class ConNguoi {
constructor(hoTen, namSinh) {
this.hoTen = hoTen || "unknown";
this.namSinh = namSinh || "unknown";
}
getHoTen() {
return "Tên " + this.hoTen + ", sinh năm " + this.namSinh;
}
}
class SinhVien extends ConNguoi {
constructor(maSSV, hoTen, namSinh) {
super(hoTen, namSinh);
this.maSSV = maSSV || "unknown";
}
getThongTin() {
return this.getHoTen() + ", mã sinh viên " + this.maSSV;
}
}
var sinhVien1 = new SinhVien("B1704863", "Ngô Minh Trung", "1999");
console.log(sinhVien1.getThongTin());
Kết quả:
Tên Ngô Minh Trung, sinh năm 1999, mã sinh viên B1704863
Qua đoạn code trên ta thấy:
-
Xuất hiện từ khóa
super
: Phương thức super() này là phương thức tham chiếu đến lớp cha. Khi chúng ta gọi phương thức super() trong hàm khởi tạo thì chúng ta gọi đến phương thức khởi tạo của lớp cha và có quyền truy cập đến các thuộc tính và phương thức khởi tạo của lớp cha.
-
Chúng ta cũng có thể gọi phương thức của lớp cha thông qua từ khóa super() khi chúng ta overwride phương thức đó.
Ví dụ:
class ConNguoi {
constructor(hoTen, namSinh) {
this.hoTen = hoTen || "unknown";
this.namSinh = namSinh || "unknown";
}
getThongTin() {
return "tên " + this.hoTen + ", sinh năm " + this.namSinh;
}
}
class SinhVien extends ConNguoi {
constructor(maSSV, hoTen, namSinh) {
super(hoTen, namSinh);
this.maSSV = maSSV || "unknown";
}
// Ghi đè phương thức
getThongTin() {
return (
"MSSV " + this.maSSV + ", " + super.getThongTin()
);
}
}
var sinhVien1 = new SinhVien("B1704863", "Ngô Minh Trung", "1999");
console.log(sinhVien1.getThongTin());
Kết quả được như sau:
MSSV B1704863, tên Ngô Minh Trung, sinh năm 1999
Như vậy, ở class SinhVien
mình đã ghi đè thành công phương thức getThongTin()