Modifikátor protected v TypeScript

Súkromné vlastnosti a metódy nie sú dedené potomkami. Niekedy však potrebujeme, aby vlastnosť alebo metóda neboli prístupné zvonku, ale boli zdedené potomkami. V tomto prípade by sme mali použiť modifikátor protected.

Vyskúšajme to v praxi. Deklarujme v našej triede User metódu cape ako chránenú pomocou modifikátora protected:

typescriptclass User {
  protected cape(str: string) {
    return str[0].toUpperCase() + str.slice(1);
  }
}

Vytvorme triedu Student, ktorá dedí od triedy User:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
}

Pridajme metódu, ktorá zobrazí meno:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
  
  public showName(): string {
    return this.name;
  }
}

A teraz použime chránenú metódu rodiča vo vnútri metódy potomka:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
  
  public showName(): string {
    return this.cape(this.name); // použijeme metódu rodiča
  }
}

Vytvorme objekt našej triedy:

typescriptlet student: Student = new Student('john');

Použime metódu na zobrazenie študenta:

typescriptconsole.log(student.showName());

Pokus o volanie metódy cape zvonku triedy však spôsobí chybu:

typescriptconsole.log(student.cape('test')); // chyba
Задание 1

Daná je nasledujúca trieda:

typescriptclass User {
  protected name: string;
  protected surn: string;
  
  constructor(name: string, surn: string) {
    this.name = name;
    this.surn = surn;
  }
}

Zdedte z tejto triedy triedu Employee, ktorá pridá chránenú vlastnosť salary, ako aj gettery všetkých vlastností, ako svojich, tak aj zdedených.