Inicio > Cursos > JavaScript > Herencia y Polimorfismo
JavaScriptProgramación Orientada a ObjetosLección 17 de 24

Herencia y Polimorfismo

La herencia es el principio de que una clase (hija) puede reutilizar el código de otra clase (padre) y además agregar o modificar comportamiento. Con extends defines la relación de herencia. La clase hija automáticamente tiene todos los métodos del padre sin necesidad de reescribirlos.

super() dentro del constructor llama al constructor del padre para inicializar las propiedades heredadas. Es obligatorio llamarlo antes de usar this en el constructor de la clase hija. super.metodo() llama a un método del padre desde la clase hija, útil cuando quieres extender su comportamiento sin reemplazarlo completamente.

La herencia debe usarse con criterio. El principio "favor composition over inheritance" dice que muchas veces es mejor que un objeto contenga instancias de otros objetos en lugar de heredar de ellos. La herencia profunda (muchos niveles) crea código difícil de entender y mantener.

class Animal {
  constructor(nombre) {
    this.nombre = nombre;
  }
  hablar() {
    return `${this.nombre} hace un sonido`;
  }
}

// Perro hereda de Animal
class Perro extends Animal {
  constructor(nombre, raza) {
    super(nombre); // Llama al constructor de Animal
    this.raza = raza;
  }
  
  // Sobreescribir (polimorfismo)
  hablar() {
    return `${this.nombre} ladra: ¡Woof!`;
  }
  
  traer(objeto) {
    return `${this.nombre} trae el ${objeto}`;
  }
}

class Gato extends Animal {
  hablar() {
    return `${this.nombre} maúlla: ¡Miau!`;
  }
}

const animales = [
  new Perro("Rex", "Labrador"),
  new Gato("Luna"),
  new Animal("Pez")
];

// Polimorfismo: mismo método, comportamiento diferente
animales.forEach(a => console.log(a.hablar()));
// Rex ladra: ¡Woof!
// Luna maúlla: ¡Miau!
// Pez hace un sonido

console.log(new Perro("Toby", "Poodle") instanceof Animal); // true
Consejo🔍 instanceof verifica si un objeto es instancia de una clase o cualquier clase en su cadena de herencia.
← Clases en JavaScriptClosures y Scope →

Practica esta lección

Resuelve los ejercicios del curso de JavaScript en la app, gratis y con corrección automática.

Empezar a practicar