TypeScript да protected модификатори
Хусусий хусусиятлар ва методлар авлодлар томониidan мерос қолинмайди.
Аммо, баъзан бизга хусусият ёки метод ташқаридан мураккаб бўлиши, аммо
авлодларда мавжуд бўлиши керак бўлади. Бундай ҳолда
protected модификаторини ишлатиш керак.
Келинг, амалда синаб кўрамиз. Бизнинг User синфимизда
cape методни protected модификатори ёрдамида
ҳимояланган қилиб эълон қиламиз:
class User {
protected cape(str: string) {
return str[0].toUpperCase() + str.slice(1);
}
}
User синфидан мерос олувчи Student синфини яратамиз:
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 хусусиятини қўшсин, шунингдек, ўзининг ва мерос олган
барча хусусиятлари учун геттерларни қўшсин.