Class Inheritance

وراثت یعنی یک کلاس (فرزند) می‌تونه خصوصیات و متدهای یک کلاس دیگه (والد) رو به ارث ببره و در صورت نیاز تغییر (Override) بده.

در جاوااسکریپت برای وراثت از کلمه کلیدی extends استفاده می‌کنیم.

1️⃣ وراثت ساده

class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} یک صدایی درمیاره`); } } class Dog extends Animal { bark() { console.log(`${this.name} پارس می‌کنه 🐶`); } } const dog = new Dog("Rex"); dog.speak(); // Rex یک صدایی درمیاره dog.bark(); // Rex پارس می‌کنه 🐶

👉 Dog متدهای کلاس Animal رو هم به ارث می‌بره.

2️⃣ استفاده از super در Constructor

وقتی کلاس فرزند constructor خودش رو تعریف می‌کنه، باید اول super() رو صدا بزنه تا سازنده‌ی والد اجرا بشه.

class Person { constructor(name, age) { this.name = name; this.age = age; } } class Student extends Person { constructor(name, age, major) { super(name, age); // صدا زدن constructor پدر this.major = major; } } const s = new Student("Ali", 21, "Computer Science"); console.log(s); // Student { name: 'Ali', age: 21, major: 'Computer Science' }

3️⃣ Override متدها

می‌تونیم متد پدر رو بازنویسی کنیم:

class Animal { speak() { console.log("یک حیوان صدا درمیاره"); } } class Cat extends Animal { speak() { console.log("گربه میاو می‌کنه 🐱"); } } const c = new Cat(); c.speak(); // گربه میاو می‌کنه 🐱

4️⃣ صدا زدن متد والد با super

اگه بخوایم هم متد والد اجرا بشه هم متد فرزند:

class Animal { speak() { console.log("حیوان صدا درمیاره"); } } class Bird extends Animal { speak() { super.speak(); // صدا زدن متد پدر console.log("پرنده جیک جیک می‌کنه 🐦"); } } const b = new Bird(); b.speak(); // حیوان صدا درمیاره // پرنده جیک جیک می‌کنه 🐦

5️⃣ Chain وراثت (چند سطحی)

وراثت می‌تونه چند سطح داشته باشه:

class LivingThing { breathe() { console.log("نفس می‌کشه"); } } class Animal extends LivingThing { move() { console.log("حرکت می‌کنه"); } } class Fish extends Animal { swim() { console.log("شنا می‌کنه 🐟"); } } const f = new Fish(); f.breathe(); // نفس می‌کشه f.move(); // حرکت می‌کنه f.swim(); // شنا می‌کنه 🐟

6️⃣ Static Methods هم به ارث می‌رسن

class Parent { static hello() { console.log("سلام از پدر"); } } class Child extends Parent {} Child.hello(); // سلام از پدر

📌 خلاصه

  • برای وراثت از extends استفاده می‌کنیم.

  • سازنده‌ی فرزند باید اول super() رو صدا بزنه.

  • متدها رو می‌تونیم Override کنیم.

  • با super.method() میشه متد والد رو داخل فرزند صدا زد.

  • وراثت چندسطحی هم امکان‌پذیره.