وراثت کلاس (Class Inheritance)
«وراثت کلاس» یعنی یک کلاس، ویژگی ها و متدهای کلاس دیگر را می گیرد. مثل اینکه شاگرد زرنگ، جزوه معلم را هم داشته باشد.
ایجاد وراثت با extends
با کلمه «extends» یک کلاس فرزند می سازیم. سپس از پدر می گیرد.
class Car {
constructor(brand) {
this.carname = brand;
}
present() {
return "I have a " + this.carname;
}
}
class Model extends Car {
constructor(brand, mod) {
super(brand);
this.model = mod;
}
show() {
return this.present() + ", it is a " + this.model;
}
}
let myCar = new Model("Ford", "Mustang");
// نمونه خروجی: I have a Ford, it is a Mustang
نکته: «super()» سازنده پدر را صدا می زند. سپس به ویژگی های پدر دسترسی داریم.
گیرنده/گذارنده (Get/Set) در کلاس
با «get» و «set» مقدار را کنترل کن. مثل فیلتر روی ورودی.
class Car {
constructor(brand) {
this.c = brand;
}
get cnam() {
return this.c;
}
set cnam(x) {
this.c = x;
}
}
const myCar = new Car("Ford");
const nameNow = myCar.cnam;
الگوی نام گذاری با آندرلاین
گاهی ویژگی واقعی را با «_» جدا می کنند. اشتباه کمتر می شود.
class Car {
constructor(brand) {
this._carname = brand;
}
get carname() {
return this._carname;
}
set carname(x) {
this._carname = x;
}
}
const car = new Car("Ford");
const n1 = car.carname;
تغییر مقدار با Setter
setter را مثل انتساب معمولی صدا می زنی. پرانتز نمی خواهد.
class Car {
constructor(brand) {
this._carname = brand;
}
get carname() {
return this._carname;
}
set carname(x) {
this._carname = x;
}
}
const myCar2 = new Car("Ford");
myCar2.carname = "Volvo";
const nowName = myCar2.carname;
Hoisting در کلاس ها
تعریف کلاس بالا کشیده نمی شود. پس قبلِ استفاده تعریف کن.
// هنوز نمی توان از کلاس استفاده کرد.
// const a = new Car("Ford"); // خطا می دهد.
class Car {
constructor(brand) {
this.carname = brand;
}
}
// حالا مجاز است.
const myCar3 = new Car("Ford");
گام های تمرینی سریع
- کلاس «Animal» بساز و متد «speak» بده.
- کلاس «Dog» با «extends Animal» بساز.
- در «Dog» متد را بازنویسی کن و خروجی بگیر.
نکته: وراثت برای «استفاده دوباره کد» بسیار مفید است.
ادامه مطالعه: کلاس ها و گیرنده/گذارنده. همچنین وراثت کلاس را نشانه گذاری کن.
منابع بیشتر
- W3Schools: Class Inheritance — مثال های ساده و روشن.
- MDN: class extends — توضیح استاندارد و جزئیات دقیق.
جمع بندی سریع
- extends برای ساخت فرزند است.
- super سازنده پدر را صدا می زند.
- getter/setter کنترل داده را می دهند.
- کلاس ها hoist نمی شوند.