29. Polimorfismo

Versión para imprimir.

En esta lección se presenta el concepto de polimorfismo.

A. Sobrescritura de métodos

class Despedida {
 despídete() {
  console.log("Adios")
 }
}

class DespedidaIngles
 extends Despedida {
 /** @override */
 despídete() {
  console.log("Bye")
 }
}

const despedidas = [
 new Despedida(),
 new DespedidaIngles()]
for (var d of despedidas) {
 d.despídete()
}

Salida

Adios
Bye

Depúralo en JavaScript Tutor.

B. Interfaces

/** @interface */
class IntfMensaje {
 saludo() {
  throw new Error("interface")
 }
}

/** @implements {IntfMensaje} */
class MensajeIng {
 saludo() {
  console.log("Hi")
 }
}

/** @implements {IntfMensaje} */
class MensajeEsp {
 saludo() {
  console.log("Hola")
 }
}

const imensajes = [
 new MensajeEsp(),
 new MensajeIng()]
for (var mens of imensajes) {
 mens.saludo()
}

Salida

Hola
Hi

Depúralo en JavaScript Tutor.

C. Interfaces de JavaScript

class MensajeIng2 {
 saludo() {
  console.log("Hi")
 }
}

class MensajeEsp2 {
 saludo() {
  console.log("Hola")
 }
}

const mensajes = [
 new MensajeEsp2(),
 new MensajeIng2()]
for (var mens of mensajes) {
 mens.saludo()
}

Salida

Hola
Hi

Depúralo en JavaScript Tutor.

D. Clases abstractas

class Deportista {
 constructor(nombre) {
  this.nombre = nombre
 }
 presenta() {
  console.log(`Soy ${this.nombre}`)
 }
 /** @abstract */
 anota() {
  throw new Error("abstract")
 }
}

class Basketbolista
 extends Deportista {
 constructor(nombre) {
  super(nombre)
 }
 /** @override */
 anota() {
  console.log("Encesto")
 }
}

class Futbolista
 extends Deportista {
 constructor(nombre) {
  super(nombre)
 }
 /** @override */
 anota() {
  console.log("Anoto gol")
 }
}

const deportistas = [
 new Basketbolista("LeBron"),
 new Futbolista("Lionel")]
for (var dep of deportistas) {
 dep.presenta()
 dep.anota()
}

Salida

Soy LeBron
Encesto
Soy Lionel
Anoto gol

Depúralo en JavaScript Tutor.

E. Resumen