Ör

Öröklés ebben a kurzusban: JavaScript

1 feladat

A(z) Öröklés fogalomról

Az öröklődés segítségével szülő-gyerek kapcsolatot hozhatsz létre osztályok között. A gyermekosztály (amelyet néha alosztálynak is neveznek) hozzáfér a szülőosztály (amelyet néha főosztálynak is neveznek) által meghatározott viselkedéshez és adatokhoz.

class Pet {
  constructor(name) {
    this.name = name;
  }

  introduce() {
    console.log(`This is my pet, ${this.name}.`);
  }
}

class Dog extends Pet {}

const dog = new Dog('Otis');
dog.introduce();
// => This is my pet, Otis.

A gyermekosztály deklarációjában szereplő extends kulcsszó a prototípláncon keresztül teremt kapcsolatot a szülőosztállyal.

A gyermek konstruktorával létrehozott objektumok prototípláncában ott lesz a szülőosztály prototípusa, így hozzáférnek minden metódushoz és adathoz, amelyet a szülő definiál.

const dog = new Dog('Otis');

Dog.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(Dog.prototype); // => true

Pet.prototype.hasOwnProperty('introduce'); // => true
Dog.prototype.hasOwnProperty('introduce'); // => false
dog.hasOwnProperty('introduce'); // => false

Konstruktorok

Ha a gyermekosztály nem definiál konstruktorfüggvényt, akkor a szülő konstruktorfüggvényét használja. Ha viszont a gyermekosztály saját konstruktorfüggvényt definiál, a szülő konstruktorát explicit módon meg kell hívni. A szülő konstruktor meghívásához a gyermek konstruktorának a hatóköréből a super kulcsszót használjuk.

class Pet {
  constructor(name) {
    this.name = name;
  }
}

class Dog extends Pet {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }
}

const dog = new Dog('Otis', 'Pug');

Mivel a szülő konstruktor felelős az új objektum inicializálásáért és a this-hez rendeléséért, még azelőtt meg kell hívni, hogy a gyermek konstruktora használná a this-t.

class Dog extends Pet {
  constructor(name, breed) {
    // using 'this' before calling the parent constructor with 'super'
    this.breed = breed;
    super(name);
  }
}

const dog = new Dog('Otis', 'Pug');
// => ReferenceError: Must call super constructor in derived class before accessing 'this'...

Metódusok definiálása a gyermekosztályon

A gyermekosztály a szülőtől örökölt viselkedés mellett saját viselkedést is definiálhat.

Ez az egyik fő oka annak, hogy öröklődést használunk: hogy specializált gyermekosztályaink legyenek saját egyedi adatokkal és metódusokkal, amelyeket a szülőosztály által biztosított közös metódusok és adatok kötnek össze.

class Dog extends Pet {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }

  describe() {
    console.log(`${this.name} is a ${this.breed}.`);
  }
}

const dog = new Dog('Otis', 'Pug');
dog.introduce();
dog.describe();
// => 'This is my pet, Otis.'
// => 'Otis is a Pug.'

A szülőosztálytól örökölt metódusok felülírása

A gyermekosztály felül is írhatja a szülő által definiált metódus viselkedését, és lecserélheti vagy kiterjesztheti azt a saját maga által definiált viselkedéssel.

class Cat extends Pet {
  // replacing parent class behavior
  introduce() {
    console.log(`This is my cat, ${this.name}.`);
  }
}

class Dog extends Pet {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }

  describe() {
    console.log(`${this.name} is a ${this.breed}.`);
  }

  // extending parent class behavior
  introduce() {
    super.introduce();
    this.describe();
  }
}

const cat = new Cat('Milo');
cat.introduce();
// => 'This is my cat, Milo.'

const dog = new Dog('Otis', 'Pug');
dog.introduce();
// => This is my pet, Otis.
// => Otis is a Pug.

Ha a gyermekosztály egy ugyanilyen nevű metódusának törzséből szeretnéd meghívni a szülőosztályon definiált metódust, a super kulcsszóval kell a szülőre hivatkoznod.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Öröklés fogalmat