Ο τροποποιητής 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, καθώς και getters για όλες τις ιδιότητες, τόσο τις δικές της, όσο και αυτές που κληρονόμησε.