Modyfikator protected w TypeScript

Prywatne właściwości i metody nie są dziedziczone przez klasy potomne. Czasami jednak potrzebujemy, aby właściwość lub metoda nie były dostępne z zewnątrz, ale były dziedziczone przez potomków. W tym przypadku należy użyć modyfikatora protected.

Wypróbujmy to w praktyce. Zadeklarujmy w naszej klasie User metodę cape jako chronioną za pomocą modyfikatora protected:

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

Stwórzmy klasę Student, dziedziczącą po klasie User:

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

Dodajmy metodę wyświetlającą imię:

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

A teraz użyjmy chronionej metody rodzica wewnątrz metody potomka:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
  
  public showName(): string {
    return this.cape(this.name); // używamy metody rodzica
  }
}

Stwórzmy obiekt naszej klasy:

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

Skorzystajmy z metody, aby wyświetlić studenta:

typescriptconsole.log(student.showName());

Natomiast próba wywołania metody cape na zewnątrz klasy spowoduje błąd:

typescriptconsole.log(student.cape('test')); // błąd
Задание 1

Dana jest następująca klasa:

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

Odziedzicz po tej klasie klasę Employee, która doda chronioną właściwość salary, a także gettery wszystkich właściwości, zarówno swoich, jak i odziedziczonych.