Ghi đè phương thức kế thừa
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 36 trên 56.
Ghi đè phương thức (method overriding) là khi lớp con tự triển khai một phương thức mà lớp đó kế thừa từ lớp cha. Phiên bản của lớp con sẽ ghi đè (thay thế) phiên bản của lớp cha.
Ví dụ đơn giản:
Tạo một lớp cha có phương thức:
class Vehicle {
start() {
return "Vehicle starting...";
}
}Tạo một lớp con kế thừa lớp cha:
class Car extends Vehicle {
// Đoạn này GHI ĐÈ phương thức (method) start() của Vehicle
start() {
return "Car engine roaring to life!";
}
}Sử dụng các lớp:
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..." (bản gốc)
console.log(car.start()); // "Car engine roaring to life!" (ghi đè)Các quy tắc chính khi ghi đè:
- Cùng tên phương thức với lớp cha
- Cùng tham số hoặc tham số tương thích
- Phiên bản của lớp con được gọi trên các đối tượng con
- Không cần từ khóa đặc biệt, chỉ cần định nghĩa phương thức
Thử thách
Bạn được cung cấp lớp cha Shape và lớp con Circle. Lớp cha có phương thức calculateArea() trả về 0.
Nhiệm vụ của bạn là ghi đè phương thức calculateArea() trong lớp Circle để tính diện tích thực tế của hình tròn.
Công thức tính diện tích hình tròn là: π × bán kính²
Trong JavaScript: Math.PI * this.radius * this.radius
Tự làm thử
import { Shape } from './shapes.js';
import { Circle } from './shapes.js';
// Kiểm tra phần bạn đã triển khai
const myCircle = new Circle(5);
console.log(myCircle.calculateArea());
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
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