Pengubah protected dalam TypeScript

Sifat dan kaedah peribadi tidak diwarisi oleh keturunan. Kadang-kadang, bagaimanapun, kita perlu agar sifat atau kaedah tidak boleh diakses dari luar, tapi diwarisi oleh keturunan. Dalam kes ini , pengubah protected harus digunakan.

Mari kita cuba dalam amalan. Isytiharkan dalam kelas User kami kaedah cape sebagai dilindungi dengan menggunakan pengubah protected:

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

Mari buat kelas Student, yang mewarisi dari kelas User:

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

Tambahkan kaedah yang memaparkan nama:

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

Dan sekarang gunakan kaedah terlindung induk di dalam kaedah keturunan:

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

Mari buat objek kelas kami:

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

Gunakan kaedah untuk memaparkan pelajar:

typescriptconsole.log(student.showName());

Namun, percubaan untuk memanggil kaedah cape dari luar kelas akan menyebabkan ralat:

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

Diberi kelas berikut:

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

Warisi dari kelas ini kelas Employee, yang akan menambah sifat terlindung salary, serta getter semua sifat, baik sendiri maupun yang diwarisi.