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:

javascriptclass 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:

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

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

javascriptclass 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:

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

Pode ser simplificado:

javascriptclass Student extends User {
  incAge() {
    this.setAge(++this.getAge());
  }
}
Задание 1

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

javascriptclass User {
  #name;
  
  setName(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

class Employee extends User {
  setName(name) {
    if (name.length > 0) {
      this.#name = name;
    }
  }
}