Sobrescribir métodos heredados
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 36 de 56.
La sobrescritura de métodos (method overriding) es cuando una clase hija proporciona su propia implementación de un método que heredó de una clase padre. La versión de la hija "sobrescribe" (reemplaza) la versión de la clase padre.
Ejemplo sencillo:
Crea una clase padre con un método:
class Vehicle {
start() {
return "Vehicle starting...";
}
}Crea una clase hija que extiende a la clase padre:
class Car extends Vehicle {
// Esto SOBREESCRIBE el método start() de Vehicle
start() {
return "Car engine roaring to life!";
}
}Usa las clases:
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..." (original)
console.log(car.start()); // "Car engine roaring to life!" (sobrescrito)Reglas clave para la sobrescritura:
- Mismo nombre de método que el padre
- Parámetros iguales o compatibles
- Se llama a la versión del hijo en objetos hijos
- No se necesitan palabras clave especiales - simplemente define el método
Desafío
Se te proporciona una clase padre Shape y una clase hija Circle. La clase padre tiene un método calculateArea() que devuelve 0.
Tu tarea es sobrescribir el método calculateArea() en la clase Circle para calcular el área real de un círculo.
La fórmula para el área del círculo es: π × radio²
En JavaScript: Math.PI * this.radius * this.radius
Hoja de referencia
La sobrescritura de métodos ocurre cuando una clase hija proporciona su propia implementación de un método heredado de una clase padre. La versión de la hija reemplaza la versión del padre.
Ejemplo:
class Vehicle {
start() {
return "Vehicle starting...";
}
}
class Car extends Vehicle {
// Sobrescribe el método start() de Vehicle
start() {
return "Car engine roaring to life!";
}
}
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..."
console.log(car.start()); // "Car engine roaring to life!"Reglas clave:
- Usa el mismo nombre de método que el padre
- Usa los mismos parámetros o parámetros compatibles
- Se llama a la versión de la hija en los objetos hijos
- No se necesitan palabras clave especiales: simplemente define el método en la clase hija
Pruébalo tú mismo
import { Shape } from './shapes.js';
import { Circle } from './shapes.js';
// Prueba tu implementación
const myCircle = new Circle(5);
console.log(myCircle.calculateArea());
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase Círculo14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con Composición9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repaso