Вопрос проверяет понимание модификаторов доступа в ООП и их влияния на инкапсуляцию и наследование.
Модификаторы доступа private и protected являются ключевыми инструментами инкапсуляции в объектно-ориентированном программировании. Они определяют, какие части класса могут быть доступны извне, а какие остаются скрытыми. Основное различие заключается в уровне доступа для классов-наследников.
Члены класса, объявленные как private, доступны только внутри того класса, в котором они определены. Даже классы-наследники не имеют к ним прямого доступа. Это обеспечивает максимальную защиту внутренней реализации.
class Parent {
private secret = 'hidden';
private getSecret() { return this.secret; }
public reveal() { return this.getSecret(); }
}
class Child extends Parent {
public tryAccess() {
// Ошибка: Property 'secret' is private
// return this.secret;
return this.reveal(); // Работает через публичный метод
}
}Protected члены доступны внутри класса и во всех его подклассах. Это позволяет наследникам использовать и переопределять внутреннюю логику, сохраняя её скрытой от внешнего кода.
class Vehicle {
protected speed = 0;
protected engineStarted = false;
protected startEngine() { this.engineStarted = true; }
public accelerate() { this.speed += 10; }
}
class Car extends Vehicle {
public start() {
this.startEngine(); // Доступно
this.speed = 20; // Доступно
}
}
const car = new Car();
// car.speed = 50; // Ошибка: Property 'speed' is protectedВыбор между private и protected зависит от архитектуры: если вы пишете библиотеку или фреймворк, где наследники должны иметь доступ к внутренностям — используйте protected. Если же класс не предназначен для наследования или вы хотите жестко контролировать API — private будет правильным выбором.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
TypeScript
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию