ตัวแก้ไข 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 และยังรวมถึงเก็ตเตอร์ของทุกคุณสมบัติ ทั้งของคุณเอง และที่สืบทอดมา