Модификатор protected у TypeScript-у

Приватна својства и методе се не наслеђују од потомка. Понекад, међутим, желимо да својство или метод не буду доступни споља, али да буду наслеђени од стране потомака. У том случају треба користити модификатор protected.

Хајде да испробамо у пракси. Декларишимо у нашој класи User метод cape као заштићени користећи модификатор protected:

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

Направимо класу Student која наслеђује од класе User:

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

Додајмо метод који исписује име:

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

А сада искористимо заштићени метод родитеља унутар метода потомка:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
  
  public showName(): string {
    return this.cape(this.name); // користимо метод родитеља
  }
}

Креирајмо објекат наше класе:

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

Искористимо метод за испис студента:

typescriptconsole.log(student.showName());

Али покушај да се позове метод cape споља класе ће резултирати грешком:

typescriptconsole.log(student.cape('test')); // грешка
Задание 1

Дата је следећа класа:

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

Наследите од ове класе класу Employee, која ће додати заштићено својство salary, као и геттере за сва својства, како своја, тако и наслеђена.