Menu
CoddyTech

Đ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 meo

Cả 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.

challenge icon

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.

  1. Trong lớp EmailNotification, phương thức cần trả về chuỗi: "Sending '(message)' via Email"
  2. 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 SMSNotification
quiz iconTự kiểm tra

Bà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

Tự luyện tập: Trình biên dịch JavaScript online