Modifikaator protected TypeScriptis

Privaatsed omadused ja meetodid ei pärine järglastelt. Mõnikord vajame aga, et omadus või meetod ei oleks väliselt kättesaadav, kuid oleks päritud järglaste poolt. Sel juhul tuleks kasutada modifikaatorit protected.

Proovime seda praktikas. Deklareerime oma klassis User meetodi cape kui kaitstud, kasutades modifikaatorit protected:

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

Teeme klassi Student, mis pärineb klassist User:

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

Lisame meetodi, mis kuvab nime:

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

Ja nüüd kasutame kaitstud meetodit vanemast klassi last klassi meetodi sees:

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

Loome oma klassi objekti:

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

Kasutame meetodit õpilase väljastamiseks:

typescriptconsole.log(student.showName());

Kuid katse kutsuda meetodit cape klassist väljapoolt viib veani:

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

Antud on järgmine klass:

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

Pärinege sellest klassist klass Employee, mis lisab kaitstud omaduse salary, ning getterid kõikidele omadustele, nii enda kui ka päritud omadustele.