Modifikator protected v TypeScript

Zasebne lastnosti in metode niso podedovane s strani potomcev. Včasih pa potrebujemo, da lastnost ali metoda ni dostopna od zunaj, vendar je podedovana s strani potomcev. V tem primeru je treba uporabiti modifikator protected.

Poskusimo v praksi. V našem razredu User deklarirajmo metodo cape kot zaščiteno z uporabo modifikatorja protected:

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

Naredimo razred Student, ki podeduje od razreda User:

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

Dodajmo metodo, ki izpiše ime:

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

In zdaj uporabimo zaščiteno metodo starša znotraj metode potomca:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
  
  public showName(): string {
    return this.cape(this.name); // uporabimo metodo starša
  }
}

Ustvarimo objekt našega razreda:

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

Uporabimo metodo za izpis študenta:

typescriptconsole.log(student.showName());

Poskus klica metode cape zunaj razreda pa bo povzročil napako:

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

Podan je naslednji razred:

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

Podedujte od tega razreda razred Employee, ki bo dodal zaščiteno lastnost salary, ter getterje vseh lastnosti, tako lastnih kot podedovanih.