Праблема прыватных уласцівасцяў пры наследаванні ў ААП у JavaScript

Toе, што прыватныя ўласцівасці не наследуюцца, можа прывесці да нечаканай праблемы. Давайце паглядзім на прыкладзе. Хай у нас ёсць наступны клас-бацька з прыватным уласцівасцю:

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

Хай у класе-нашчадку мы вырашылі зрабіць метад, які будзе павялічваць ўзрост на адзінку. Аднак, спроба змяніць прыватнае ўласцівасць бацькі прывядзе да памылкі:

javascriptclass Student extends User {
  incAge() {
    this.#age++; // памылка
  }
}

Памылка знікне, калі ў класе-нашчадку аб'явіць прыватнае ўласцівасць #age:

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

Тут-то нас і падпільноўвае пастка! На самай справе мы зрабілі два прыватныя ўласцівасці: адно ў бацьку і адно ў нашчадку. І яны працуюць цалкам незалежна. Гэта значыць, што метады бацькі будуць змяняць свой уласцівасць, а метады нашчадка - свае.

Гэтая праблема на самой справе мае рашэнне. Проста трэба маніпуляваць прыватнымі ўласцівасцямі бацькі праз метады гэтага бацькі. Давайце перапішам наш код у адпаведнасці з гэтым:

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

Можна спрасціць:

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

У наступным кодзе ў класе нашчадка перавызначаецца метад бацькі. Выпраўце праблемы ў гэтым кодзе:

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;
    }
  }
}