JavaScript'te OOP'de Kalıtım Sırasında Özel Özellikler Sorunu
Özel özelliklerin kalıtılmaması, beklenmedik bir soruna yol açabilir. Bir örnek üzerinden inceleyelim. Aşağıdaki gibi özel bir özelliği olan bir ebeveyn sınıfımız olduğunu varsayalım:
class User {
#age;
setAge(age) {
this.#age = age;
}
getAge() {
return this.#age;
}
}
Alt sınıfta, yaşı bir birim artıran bir metod yapmak istediğimizi varsayalım. Ancak, ebeveynin özel özelliğini değiştirme girişimi bir hataya yol açacaktır:
class Student extends User {
incAge() {
this.#age++; // hata
}
}
Alt sınıfta #age özel özelliği
bildirilirse hata kaybolur:
class Student extends User {
#age;
incAge() {
this.#age++;
}
}
İşte tam da burada bir tuzakla karşılaşıyoruz! Aslında iki özel özellik oluşturduk: biri ebeveynde, diğeri alt sınıfta. Ve bunlar tamamen bağımsız çalışır. Bu, ebeveyn metotlarının kendi özelliklerini, alt sınıf metotlarının ise kendi özelliklerini değiştireceği anlamına gelir.
Bu sorunun aslında bir çözümü var. Sadece ebeveynin özel özellikleriyle, ebeveynin metotları aracılığıyla manipülasyon yapmak gerekiyor. Kodumuzu buna göre yeniden yazalım:
class Student extends User {
incAge() {
let age = this.getAge();
age++;
this.setAge(age);
}
}
Basitleştirilebilir:
class Student extends User {
incAge() {
this.setAge(++this.getAge());
}
}
Aşağıdaki kodda, alt sınıfta ebeveyn metodu geçersiz kılınmıştır. Bu koddaki sorunları düzeltin:
class User {
#name;
setName(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
class Employee extends User {
setName(name) {
if (name.length > 0) {
this.#name = name;
}
}
}