⊗jsOpIhPPP 36 of 60 menu

O problema das propriedades privadas na herança em POO em JavaScript

O fato de que propriedades privadas não são herdadas pode levar a um problema inesperado. Vamos ver um exemplo. Suponha que temos a seguinte classe pai com uma propriedade privada:

class User { #age; setAge(age) { this.#age = age; } getAge() { return this.#age; } }

Suponha que na classe filha decidimos criar um método que irá aumentar a idade em um. No entanto, a tentativa de alterar a propriedade privada do pai resultará em um erro:

class Student extends User { incAge() { this.#age++; // erro } }

O erro desaparecerá se na classe filha declararmos a propriedade privada #age:

class Student extends User { #age; incAge() { this.#age++; } }

É aqui que nos espera uma armadilha! Na verdade, criamos duas propriedades privadas: uma no pai e uma na filha. E elas funcionam completamente de forma independente. Isso significa que os métodos do pai irão alterar sua própria propriedade, e os métodos da filha - as delas.

Este problema na verdade tem solução. Simplesmente é preciso manipular as propriedades privadas do pai através dos métodos desse pai. Vamos reescrever nosso código de acordo com isso:

class Student extends User { incAge() { let age = this.getAge(); age++; this.setAge(age); } }

Pode ser simplificado:

class Student extends User { incAge() { this.setAge(++this.getAge()); } }

No código a seguir, na classe filha, o método do pai é sobrescrito. Corrija os problemas neste código:

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; } } }
Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar