Tạo lớp cơ sở Vehicle và các lớp con kế thừa từ nó là một cách tuyệt vời để tổ chức và quản lý thông tin về các loại phương tiện khác nhau. Trong bài tập này, mình sẽ bắt đầu tìm hiểu với lớp cơ sở Vehicle, sau đó tạo các lớp con Car, Motorcycle, và Truck.
Định nghĩa lớp cơ sở Vehicle
class Vehicle {
constructor(public brand: string, public model: string, public year: number) {}
startEngine(): void {
console.log("Đã khởi động động cơ.");
}
stopEngine(): void {
console.log("Đã tắt động cơ.");
}
}
class Car extends Vehicle {
constructor(brand: string, model: string, year: number, public type: string) {
super(brand, model, year);
this.type = type;
}
drive(): void {
console.log(`Đang lái xe ${this.year} ${this.brand} ${this.model} loại ${this.type}.`);
}
}
class Motorcycle extends Vehicle {
constructor(brand: string, model: string, year: number, public category: string) {
super(brand, model, year);
this.category = category;
}
wheelie(): void {
console.log(`Thực hiện một động tác Wheelie với xe máy ${this.year} ${this.brand} ${this.model} thuộc loại ${this.category}.`);
}
}
class Truck extends Vehicle {
constructor(brand: string, model: string, year: number, public capacity: number) {
super(brand, model, year);
this.capacity = capacity;
}
loadCargo(): void {
console.log(`Đang tải hàng vào xe tải ${this.year} ${this.brand} ${this.model} với dung tích ${this.capacity} kg.`);
}
}
// Sử dụng các lớp đã định nghĩa
const car = new Car("Toyota", "Corolla", 2022, "Sedan");
car.startEngine();
car.drive();
const motorcycle = new Motorcycle("Harley-Davidson", "Street 750", 2021, "Cruiser");
motorcycle.startEngine();
motorcycle.wheelie();
const truck = new Truck("Ford", "F-150", 2019, 2000);
truck.startEngine();
truck.loadCargo();
class Vehicle { ... }: Định nghĩa lớp cơ sở Vehicle với các thuộc tính như brand, model, year và các phương thức như startEngine() và stopEngine().
Các lớp con Car, Motorcycle, và Truck kế thừa từ Vehicle, mỗi lớp con có các thuộc tính và phương thức riêng biệt, phù hợp với loại phương tiện tương ứng.
Trong hàm constructor của mỗi lớp con, chúng ta gọi super() để gọi hàm constructor của lớp cha (Vehicle), truyền vào thông tin cần thiết cho các thuộc tính chung.
Mỗi lớp con cũng có các phương thức riêng biệt, như drive() cho Car, wheelie() cho Motorcycle, và loadCargo() cho Truck.
Kết quả
Khi chạy đoạn mã trên, mình sẽ nhận được kết quả sau:
Đã khởi động động cơ.
Đang lái xe 2022 Toyota Corolla loại Sedan.
Đã khởi động động cơ.
Thực hiện một động tác Wheelie với xe máy 2021 Harley-Davidson Street 750 thuộc loại Cruiser.
Đã khởi động động cơ.
Đang tải hàng vào xe tải 2019 Ford F-150 với dung tích 2000 kg.
Đây chỉ là ví dụ, kết quả sẽ phụ thuộc vào việc môi trường thực thi mã và cách định nghĩa các hàm trong TypeScript.
Việc sử dụng kế thừa giúp mình có thể xây dựng các lớp con với các thuộc tính và hành vi riêng biệt, đồng thời vẫn kế thừa các phương thức và thuộc tính từ lớp cơ sở Vehicle. Điều này giúp tạo ra một cấu trúc dễ quản lý và tái sử dụng linh hoạt.