Đa hình là gì?
Thuộc phần Lập trình hướng đối tượng trong hành trình JavaScript của Coddy. Bài học 35 trên 56.
Đa hình là một nguyên lý cốt lõi của lập trình hướng đối tượng, cho phép các đối tượng thuộc những lớp khác nhau phản hồi cùng một phương thức theo những cách khác nhau.
Trong JavaScript, tính đa hình thường xuất hiện khi các lớp con ghi đè phương thức của lớp cha.
Hãy tạo một lớp cha đơn giản có phương thức speak():
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}Bây giờ, hãy tạo một lớp con (class) mở rộng lớp Animal:
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}Đây là một lớp con khác:
class Cat extends Animal {
speak() {
return `${this.name} meows`;
}
}Mỗi lớp con triển khai phương thức speak() theo cách khác nhau. Đây chính là tính đa hình!
Bây giờ, chúng ta có thể tạo các đối tượng khác nhau và gọi cùng một phương thức trên mỗi đối tượng:
const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");
console.log(animal.speak()); // Some animal phát ra tiếng kêu
console.log(dog.speak()); // Rex sủa
console.log(cat.speak()); // Whiskers kêu meo meoCả ba đối tượng đều phản hồi với phương thức speak(), nhưng mỗi đối tượng thực hiện theo cách riêng.
Thử thách
Bạn có một hệ thống thông báo với lớp cha Notification và hai lớp con. Nhiệm vụ của bạn là thêm phương thức send(message) vào mỗi lớp con với cách triển khai khác nhau.
- Trong lớp
EmailNotification, phương thức cần trả về chuỗi: "Sending '(message)' via Email" - Trong lớp
SMSNotification, phương thức cần trả về chuỗi: "Sending '(message)' via SMS"
Tự làm thử
import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';
// Code kiểm thử, không chỉnh sửa
const email = new EmailNotification();
const sms = new SMSNotification();
console.log(email.send("Hello!")); // Nên dùng send() của EmailNotification
console.log(sms.send("Hello!")); // Nên dùng send() của SMSNotificationBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Đối tượng và từ khóa this
Ôn nhanh: đối tượngThêm phương thức vào đối tượngTìm hiểu từ khóa thisHàm khởi tạoTừ khóa newThử thách ôn tập7Kế thừa và từ khóa extends
Kế thừaQuan hệ "là một"Từ khóa extendsPhương thức super()Kế thừa thuộc tính và phương thứcThử thách ôn tập13Kết hợp hay kế thừa
Quan hệ “có một” và “là một”Những hạn chế của kế thừa nhiều tầngXây dựng đối tượng5Đóng gói và quyền truy cập
Đóng góiTrường công khai và trường riêng tưPhương thức riêng tưThử thách ôn tập8Tổ chức code OOP
Tổ chức các lớp thành module11Dự án: Trình hiển thị hình dạng
Thiết lập: lớp Hình dạng và xuấtKế thừa lớp Hình trònGhi đè và phương thức diện tíchBộ đếm hình dạng tĩnh6Dự án: Tài khoản ngân hàng đơn giản
Lớp BankAccountGửi tiền và rút tiềnSố dư dưới dạng thuộc tính riêng tư9Phương thức và thuộc tính tĩnh
Cấp lớp và cấp instanceThuộc tính tĩnhPhương thức tiện ích tĩnhThử thách ôn tậpTự luyện tập: Trình biên dịch JavaScript online