CodeGym /Curso de Java /Frontend SELF ES /Herencia de Clases

Herencia de Clases

Frontend SELF ES
Nivel 40 , Lección 0
Disponible

7.1 Fundamentos de la Herencia

La herencia de clases en JavaScript permite crear nuevas clases basadas en clases ya existentes, reutilizando y ampliando su funcionalidad. Este es un aspecto clave de la programación orientada a objetos (ООП), que permite crear jerarquías de clases y gestionar el comportamiento de los objetos.

Para la herencia de clases se usa la palabra clave extends. La clase que hereda otra clase se llama clase derivada (subclass), y la clase de la que se hereda se llama clase base (superclass).

Ejemplo:

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

Explicación:

  • La clase Animal es una clase base con un constructor y un método speak()
  • La clase Dog hereda de Animal y redefine el método speak()
  • La instancia dog de la clase Dog usa el método redefinido speak()

7.2 La palabra clave super

La palabra clave super se usa para llamar al constructor o métodos de la clase base desde la clase derivada.

1. Llamada al constructor de la clase base

La clase derivada debe llamar al constructor de la clase base usando super() antes de usar this.

Ejemplo:

El constructor de Dog llama a super(name) para inicializar la propiedad name de la clase base Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        constructor(name, breed) {
          super(name);
          this.breed = breed;
        }

        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex', 'Labrador');
      console.log(dog.name); // "Rex"
      console.log(dog.breed); // "Labrador"
      dog.speak(); // "Rex barks."
    
  

2. Llamada a métodos de la clase base

Los métodos de la clase base pueden ser llamados desde la clase derivada usando super.

Ejemplo:

El método speak() de la clase Dog llama al método speak() de la clase base Animal usando super.speak() y luego ejecuta su propia lógica.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          super.speak(); // Llamada al método de la clase base
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak();

      // "Rex makes a noise."
      // "Rex barks."
    
  

7.3 Herencia y redefinición de métodos

La herencia permite que las clases derivadas redefinan los métodos de la clase base. Esto permite cambiar o ampliar la funcionalidad de los métodos.

Ejemplo:

El método speak() de la clase Dog redefine el método speak() de la clase base Animal, proporcionando su propia implementación.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const animal = new Animal('Generic Animal');
      animal.speak(); // "Generic Animal makes a noise."

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

7.4 Herencia y métodos adicionales

La clase derivada puede añadir nuevos métodos que no existan en la clase base.

Ejemplo:

La clase Dog añade un nuevo método fetch(), que no existe en la clase base Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }

        fetch() {
          console.log(`${this.name} is fetching.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
      dog.fetch(); // "Rex is fetching."
    
  

7.5 Comprobación de la herencia

Para comprobar la herencia se puede usar el operador instanceof y el método isPrototypeOf().

Ejemplo:

El operador instanceof comprueba si un objeto es una instancia de una clase. El método isPrototypeOf() comprueba si el prototipo del objeto es parte de la cadena de prototipos de otro objeto.

JavaScript
    
      console.log(dog instanceof Dog); // true
      console.log(dog instanceof Animal); // true
      console.log(Animal.prototype.isPrototypeOf(Dog.prototype)); // true
    
  
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION