JavaScript үндэс / Өвлөлт (Inheritance)

Өвлөлт (Inheritance)

Өвлөлт гэдэг нь нэг class нөгөө class-ын шинж чанар, методуудыг өвлөж авах боломж юм. Жишээ нь "Амьтан" гэсэн ерөнхий class байвал "Нохой", "Муур" зэрэг тодорхой class-ууд түүнээс өвлөж болно — нийтлэг зүйлийг давтан бичих шаардлагагүй болно. Энэ нь кодыг хэмнэж, зохион байгуулалттай болгодог.

extends түлхүүр үг

extends ашиглан нэг class нөгөөгөөсөө өвлөнө. Өвлүүлэгч class-ыг parent (эцэг), өвлөн авагчийг child (хүү) гэнэ.

javascript
class Амьтан {
  constructor(нэр) {
    this.нэр = нэр;
  }

  амьсгалах() {
    console.log(`${this.нэр} амьсгалж байна.`);
  }
}

class Нохой extends Амьтан {
  хуцах() {
    console.log(`${this.нэр}: Хав хав!`);
  }
}

const шарга = new Нохой("Шарга");
шарга.амьсгалах(); // Шарга амьсгалж байна.  ← Амьтан-аас өвлөсөн
шарга.хуцах(); // Шарга: Хав хав!          ← Нохой-н өөрийн метод

Нохой class нь Амьтанамьсгалах() методыг шууд ашиглаж чадаж байна — давтан бичсэнгүй.

super() — эцэг class-ыг дуудах

Child class-д constructor бичихдээ super() заавал дуудах хэрэгтэй. super() нь parent class-ын constructor-ыг ажиллуулна.

javascript
class Амьтан {
  constructor(нэр, нас) {
    this.нэр = нэр;
    this.нас = нас;
  }

  танилцуулах() {
    console.log(`Нэр: ${this.нэр}, нас: ${this.нас}`);
  }
}

class Муур extends Амьтан {
  constructor(нэр, нас, өнгө) {
    super(нэр, нас); // эхлээд Амьтан-ы constructor-ыг дуудна
    this.өнгө = өнгө; // дараа нь өөрийн шинж нэмнэ
  }

  миаулах() {
    console.log(`${this.өнгө} өнгийн ${this.нэр}: Мяу!`);
  }
}

const цагаан = new Муур("Цагаан", 3, "цагаан");
цагаан.танилцуулах(); // Нэр: Цагаан, нас: 3
цагаан.миаулах(); // цагаан өнгийн Цагаан: Мяу!

Методыг дарж бичих (override)

Child class нь parent-ын методыг өөрийн хувилбараар солиж болно. Үүнийг method overriding гэнэ.

javascript
class Ажилтан {
  constructor(нэр, цалин) {
    this.нэр = нэр;
    this.цалин = цалин;
  }

  мэдээлэл() {
    console.log(`${this.нэр} — сарын ${this.цалин}₮`);
  }
}

class Менежер extends Ажилтан {
  constructor(нэр, цалин, баг) {
    super(нэр, цалин);
    this.баг = баг;
  }

  мэдээлэл() {
    // parent методыг дарж өөрийнхөөрөө бичлээ
    console.log(`${this.нэр} (Менежер) — ${this.баг} баг — ${this.цалин}₮`);
  }
}

const болд = new Ажилтан("Болд", 2_000_000);
const сарнай = new Менежер("Сарнай", 4_000_000, "Frontend");

болд.мэдээлэл(); // Болд — сарын 2000000₮
сарнай.мэдээлэл(); // Сарнай (Менежер) — Frontend баг — 4000000₮

Дараагийн хичээлд:

Нууцлал (Encapsulation) — класс дотор өгөгдлийг хэрхэн хамгаалах, гаднаас хандахаас урьдчилан сэргийлэх талаар үзнэ.