TypeScript'te protected Değiştiricisi

Özel (private) özellikler ve metodlar alt sınıflar tarafından kalıtımla alınmaz. Ancak bazen, bir özelliğin veya metodun dışarıdan erişilemez olmasını ama alt sınıflar tarafından miras alınabilmesini isteriz. Bu durumda protected değiştiricisi kullanılmalıdır.

Pratikte deneyelim. User sınıfımızda cape metodunu protected değiştiricisi kullanarak korumalı olarak tanımlayalım:

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

User sınıfından miras alan Student sınıfını oluşturalım:

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

İsmi gösteren bir metod ekleyelim:

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

Şimdi, üst sınıfın korumalı metodunu alt sınıfın metodu içinde kullanalım:

typescriptclass Student extends User {
  private name: string;
  
  constructor(name: string) {
    super();
    this.name = name;
  }
  
  public showName(): string {
    return this.cape(this.name); // üst sınıfın metodunu kullanıyoruz
  }
}

Sınıfımızın bir nesnesini oluşturalım:

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

Öğrenciyi göstermek için metodu kullanalım:

typescriptconsole.log(student.showName());

Ancak cape metodunu sınıf dışından çağırmaya çalışmak bir hataya yol açacaktır:

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

Aşağıdaki sınıf verilmiştir:

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

Bu sınıftan, hem kendi hem de miras alınan tüm özellikler için getter'ların yanı sıra korumalı bir salary özelliği ekleyen Employee sınıfını türetin.