Las propiedades y m茅todos protected
solo son visibles para subclases de la clase en donde son declaradas.
class Saludo {
protected getDestinatario() {
return "amigos";
}
}
class SaludoEspecial extends Saludo {
saludar() {
console.log(`Hola ${this.getDestinatario()}`); // <- accedemos al m茅todo protected
}
}
const saludo: SaludoEspecial = new SaludoEspecial();
saludo.saludar();
saludo.getDestinatario(); // <- error, no se tiene acceso de forma publica
Hola amigos
Habilitar los m茅todos protegidos
Las clases derivadas siguen el contrato definido por la clase padre, pero cuando pueden habilitar un subtipo de la clase base para brindar mas permisos sobre este. Esto incluye el convertir un m茅todo protected
en public
.
class Base {
protected m = 10;
}
class Derivada extends Base {
m = 15;
}
const d = new Derivada();
console.log(d.m);
15
Toma en cuenta que Derivada
desde el momento que extiende Base
tiene acceso a m
, sin embargo al no incluir protected
la propiedad m
pasa a ser public
y se vuelve accesible desde fuera de la definici贸n de la clase.
Cross-hierarchy protected access (protected entre diferentes clases que comparten herencia)
Diferentes tipos de lenguajes de Lenguages de POO (Programaci贸n Orientados a Objetos) estan en desacuerdo en relaci贸n a si es valido o no acceder a elementos protected
a trav茅s de diferentes clases que extienden la clase base.
Java por ejemplo considera que esto debe ser posible, mientras tanto otros lenguajes como C#, C++ y TypeScript consideran que esto no debe ser as铆.
class Base {
protected x: number = 1;
}
class Derivada1 extends Base {
protected x: number = 5;
}
class Derivada2 extends Base {
imprimirX(c1: Derivada2) {
// <-
console.log(c1.x);
}
}
Si reemplazamos Derivada2
por Derivada1
esto generar谩 un error ya que esta fuera de su scope.
Property 'x' is protected and only accessible within class 'Derivada1' and its subclasses.