Problema de las propiedades privadas en la herencia de POO en JavaScript

El hecho de que las propiedades privadas no se hereden puede llevar a un problema inesperado. Veamos un ejemplo. Supongamos que tenemos la siguiente clase padre con una propiedad privada:

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

Supongamos que en la clase hija decidimos crear un método que incrementará la edad en uno. Sin embargo, el intento de cambiar la propiedad privada del padre conducirá a un error:

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

El error desaparecerá si en la clase hija declaramos la propiedad privada #age:

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

¡Ahí es donde nos espera una trampa! En realidad, hemos creado dos propiedades privadas: una en el padre y una en el hijo. Y funcionan completamente de forma independiente. Esto significa que los métodos del padre modificarán su propiedad, y los métodos del hijo - la suya.

Este problema en realidad tiene solución. Simplemente hay que manipular las propiedades privadas del padre a través de los métodos de ese padre. Reescribamos nuestro código de acuerdo con esto:

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

Se puede simplificar:

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

En el siguiente código, en la clase hija se redefine un método del padre. Corrija los problemas en este 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;
    }
  }
}