Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

136
Views
How would you access or override a private property of a base class inside a derived class declaration?

How would you do this without:

  • exposing the private property of the base class publicly through setters and getters such as in this answer
  • or having to duplicate any relevant methods and properties of the base class into the derived class

The properties should remain truly private except within the derived class declaration, so you can't use the protected variable underscore _ convention.

Suppose I have the following code

class CoffeeMachine {
  #waterLimit = 600;
  #waterAmount = 0;

  constructor() {}

  set waterAmount(amount) {
    if (amount < 0) {
      this.#waterAmount = 0;
    } else if (amount > this.#waterLimit) {
      this.#waterAmount = this.#waterLimit;
    } else {
      this.#waterAmount = amount;
    }
  }

  get waterAmount() {
    return this.#waterAmount;
  }
}

class TeaMachine extends CoffeeMachine {
  constructor() {
    super();
  }
}

I would like the TeaMachine to be smaller, so I want it's #waterLimit equal to 400 instead of 600

Simply doing the following doesn't work

class TeaMachine extends CoffeeMachine {
  #waterLimit = 400;
  constructor() {
    super();
  }
}

const teaBox = new TeaMachine();
teaBox.waterAmount = 1000;
console.log(teaBox.waterAmount); // 600

This is the closest I could get

The water limit is set on initiation, but is no longer accessible afterwards. Though obviously this is not a perfect solution

class CoffeeMachine {
  #waterLimit;
  #waterAmount = 0;

  constructor(limit = 600) {
    this.#waterLimit = limit;
  }
}

class TeaMachine extends CoffeeMachine {
  constructor() {
    super(400);
  }
}

const teaBox = new TeaMachine();
teaBox.waterAmount = 1000;
console.log(teaBox.waterAmount); // 400

I believe this is possible in Java

Is it even possible to do this in JavaScript while meeting the aforementioned conditions? Or will I have to just accept the restrictions of the language / go down the WeakMap route?

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!