Ο τροποποιητής protected στο TypeScript
Οι ιδιωτικές ιδιότητες και μέθοδοι δεν κληρονομούνται
από τους απογόνους. Ωστόσο, μερικές φορές χρειαζόμαστε
μια ιδιότητα ή μέθοδο να μην είναι προσβάσιμη από έξω,
αλλά να κληρονομείται από τους απογόνους. Σε αυτήν
την περίπτωση, θα πρέπει να χρησιμοποιήσουμε τον τροποποιητή
protected.
Ας δοκιμάσουμε στην πράξη. Ας δηλώσουμε
στην κλάση μας User μια μέθοδο cape
ως προστατευμένη χρησιμοποιώντας τον τροποποιητή protected:
class User {
protected cape(str: string) {
return str[0].toUpperCase() + str.slice(1);
}
}
Ας φτιάξουμε μια κλάση Student, που κληρονομεί
από την κλάση User:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
}
Ας προσθέσουμε μια μέθοδο, που εμφανίζει το όνομα:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
public showName(): string {
return this.name;
}
}
Και τώρα ας χρησιμοποιήσουμε την προστατευμένη μέθοδο του γονέα μέσα στη μέθοδο του απογόνου:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
public showName(): string {
return this.cape(this.name); // χρησιμοποιούμε τη μέθοδο του γονέα
}
}
Ας δημιουργήσουμε ένα αντικείμενο της κλάσης μας:
let student: Student = new Student('john');
Ας χρησιμοποιήσουμε τη μέθοδο για να εμφανίσουμε το όνομα του φοιτητή:
console.log(student.showName());
Ωστόσο, μια προσπάθεια να καλέσουμε τη μέθοδο cape
από έξω από την κλάση θα προκαλέσει σφάλμα:
console.log(student.cape('test')); // σφάλμα
Δίνεται η ακόλουθη κλάση:
class User {
protected name: string;
protected surn: string;
constructor(name: string, surn: string) {
this.name = name;
this.surn = surn;
}
}
Κληρονομήστε από αυτήν την κλάση μια κλάση Employee,
η οποία θα προσθέσει μια προστατευμένη ιδιότητα salary,
καθώς και getters για όλες τις ιδιότητες, τόσο τις δικές της,
όσο και αυτές που κληρονόμησε.