Heredar propiedades y métodos
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 28 de 56.
Cuando una clase extiende a otra clase, hereda todas las propiedades y métodos de la clase padre. Esto significa que las clases hijas tienen acceso automáticamente a todo lo definido en la clase padre.
Vamos a crear una clase padre con propiedades y métodos:
class Animal {
constructor(name, age) {
this.name = name;
this.age = age;
}
eat() {
return `${this.name} is eating`;
}
sleep() {
return `${this.name} is sleeping`;
}
}Ahora, vamos a crear una clase hija que herede de Animal:
class Dog extends Animal {
constructor(name, age, breed) {
super(name, age);
this.breed = breed;
}
}Crea una instancia de la clase Dog:
const rex = new Dog("Rex", 3, "German Shepherd");Ahora, aunque no definimos eat() y sleep() en la clase Dog, todavía podemos usar estos métodos:
console.log(rex.eat()); // Salida: Rex is eating
console.log(rex.sleep()); // Salida: Rex is sleepingY podemos acceder a todas las propiedades heredadas:
console.log(rex.name); // Salida: Rex
console.log(rex.age); // Salida: 3
console.log(rex.breed); // Salida: German ShepherdDesafío
Crea una clase Cake que extienda a Dessert y expórtala. El Cake debe tener:
- Todas las propiedades y métodos heredados de Dessert
- Una nueva propiedad
flavor - Un nuevo método
addCandles()que devuelve una cadena “Added candles to ${this.name}!”
Hoja de referencia
Las clases hijas heredan todas las propiedades y métodos de su clase padre utilizando la palabra clave extends:
class Animal {
constructor(name, age) {
this.name = name;
this.age = age;
}
eat() {
return `${this.name} is eating`;
}
sleep() {
return `${this.name} is sleeping`;
}
}
class Dog extends Animal {
constructor(name, age, breed) {
super(name, age);
this.breed = breed;
}
}
const rex = new Dog("Rex", 3, "German Shepherd");
console.log(rex.eat()); // Rex is eating
console.log(rex.name); // Rex
console.log(rex.breed); // German ShepherdLa clase hija puede acceder a todas las propiedades y métodos heredados sin necesidad de volver a definirlos.
Pruébalo tú mismo
import { Dessert } from './desserts.js';
import { Cake } from './desserts.js';
// Código de prueba - no modificar
const myCake = new Cake("Birthday Cake", 300, "Chocolate");
console.log(myCake.describe()); // Debería mostrar "Birthday Cake has 300 calories"
console.log(myCake.flavor); // Debería mostrar "Chocolate"
console.log(myCake.addCandles()); // Debería mostrar "Added candles to Birthday Cake!"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