Protected-modifikaattori TypeScriptissä
Yksityiset ominaisuudet ja metodit eivät periydy
jalostajaluokkiin. Joskus kuitenkin tarvitsemme, että
ominaisuus tai metodi eivät olisi saatavilla ulkopuolelta,
mutta periytyisivät jalostajaluokkiin. Tässä
tapauksessa tulisi käyttää modifikaattoria
protected.
Kokeillaan käytännössä. Määritellään
luokassamme User metodi cape
suojatuksi käyttämällä modifikaattoria protected:
class User {
protected cape(str: string) {
return str[0].toUpperCase() + str.slice(1);
}
}
Tehdään luokka Student, joka perii
luokalta User:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
}
Lisätään metodi, joka tulostaa nimen:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
public showName(): string {
return this.name;
}
}
Ja nyt käytetään suojattua kantaluokan metodia jalostajaluokan metodin sisällä:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
public showName(): string {
return this.cape(this.name); // käytetään kantaluokan metodia
}
}
Luodaan olio luokastamme:
let student: Student = new Student('john');
Käytetään metodia opiskelijan tulostamiseksi:
console.log(student.showName());
Mutta yritys kutsua metodia cape
luokan ulkopuolelta johtaa virheeseen:
console.log(student.cape('test')); // virhe
Annettu seuraava luokka:
class User {
protected name: string;
protected surn: string;
constructor(name: string, surn: string) {
this.name = name;
this.surn = surn;
}
}
Peri tästä luokasta luokka Employee,
joka lisää suojatun ominaisuuden salary,
sekä getterit kaikille ominaisuuksille, sekä omille
että perityille.