⊗jsOpIhPPP 36 of 60 menu

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; } } }
Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet