Modifikátor protected v TypeScript

Privátní vlastnosti a metody nejsou děděny potomky. Někdy však potřebujeme, aby vlastnost nebo metoda nebyla přístupná zvenčí, ale byla děděna potomky. V tomto případě bychom měli použít modifikátor protected.

Pojďme to vyzkoušet v praxi. Deklarujme v naší třídě User metodu cape jako chráněnou pomocí modifikátoru protected:

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

Vytvořme třídu Student, která dědí od třídy User:

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

Přidejme metodu, která vypisuje jméno:

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

A nyní použijme chráněnou metodu rodiče uvnitř metody 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 metodu rodiče
  }
}

Vytvořme objekt naší třídy:

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

Použijme metodu pro výpis studenta:

typescriptconsole.log(student.showName());

Pokus o volání metody cape mimo třídu však povede k chybě:

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

Je dána následující třída:

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

Dědejte z této třídy třídu Employee, která přidá chráněnou vlastnost salary, a také gettery všech vlastností, jak svých, tak i děděných.