1
// 1. Superclase Padre
class Empleado {
constructor(id, nombre, salarioBase) {
this.id = id;
this.nombre = nombre;
this.salarioBase = salarioBase;
}
calcularSueldoNeto() {
// Deducción estándar del 10% de impuestos
return parseFloat((this.salarioBase * 0.90).toFixed(2));
}
obtenerFicha() {
return `[ID #${this.id}] ${this.nombre} | Salario Base: $${this.salarioBase.toFixed(2)} | Neto: $${this.calcularSueldoNeto().toFixed(2)}`;
}
}
// 2. Subclase Hija que Especializa a Empleado
class Director extends Empleado {
constructor(id, nombre, salarioBase, bonoGestion, departamento) {
// 1er paso obligatorio: Delegar datos al constructor padre
super(id, nombre, salarioBase);
// 2do paso: Inicializar propiedades exclusivas de Director
this.bonoGestion = bonoGestion;
this.departamento = departamento;
}
// Sobrescritura de Método (Override)
calcularSueldoNeto() {
// Reutilizamos el neto del padre y sumamos el bono de gestión
const sueldoBaseNeto = super.calcularSueldoNeto();
return parseFloat((sueldoBaseNeto + this.bonoGestion).toFixed(2));
}
// Sobrescritura para enriquecer la ficha
obtenerFicha() {
return `${super.obtenerFicha()} | 🌟 Rol: Director de ${this.departamento} (Bono: +$${this.bonoGestion})`;
}
aprobarPresupuesto(monto) {
console.log(` Director [${this.nombre}] aprobó presupuesto de $${monto} para ${this.departamento}.`);
}
}
// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
const desarrollador = new Empleado(101, "Carlos Mendoza", 3000);
const directorTecnico = new Director(102, "Valeria Torres", 6000, 1500, "Ingeniería de Software");
console.log("=== EMPLEADO GENERAL ===");
console.log(desarrollador.obtenerFicha());
console.log("\n=== DIRECTOR (CON HERENCIA Y SUPER) ===");
console.log(directorTecnico.obtenerFicha());
directorTecnico.aprobarPresupuesto(25000);
console.log("\n=== VERIFICACIÓN DE INSTANCIAS ===");
console.log("¿directorTecnico es Director?:", directorTecnico instanceof Director); // true
console.log("¿directorTecnico es Empleado?:", directorTecnico instanceof Empleado); // true (Herencia)
console.log("¿directorTecnico es Object?:", directorTecnico instanceof Object); // true
Haz clic para editar este código