Saltar al contenido principal
Curso/Interfaces y Clases/Clases Abstractas
Volver a Interfaces y Clases

Interfaces y Clases — Leccion 5

·15 min

Clases Abstractas

Clases que no se instancian, solo se heredan.

Clases abstractas

Una clase abstracta no se puede instanciar directamente. Sirve como base para otras clases.

typescript
abstract class Forma {
  abstract area(): number; // Obligatoria en subclases

  descripcion(): string {
    return `Area: ${this.area()}`;
  }
}

// const f = new Forma(); // Error: Cannot create instance of abstract class

class Circulo extends Forma {
  constructor(private radio: number) {
    super();
  }
  area(): number {
    return Math.PI * this.radio ** 2;
  }
}

class Rectangulo extends Forma {
  constructor(private ancho: number, private alto: number) {
    super();
  }
  area(): number {
    return this.ancho * this.alto;
  }
}

Métodos abstractos

typescript
abstract class Animal {
  abstract hacerSonido(): string; // Obligatoria
  abstract movimiento(): string;  // Obligatoria

  describir(): string {
    return `${this.hacerSonido()} y se mueve ${this.movimiento()}`;
  }
}

class Gato extends Animal {
  hacerSonido(): string { return "Miau"; }
  movimiento(): string { return "salta"; }
}

class Pato extends Animal {
  hacerSonido(): string { return "Cuac"; }
  movimiento(): string { return "nada y vuela"; }
}

Cuando usar abstract vs interface

typescript
// Interface: solo define la forma
interface Volador {
  volar(): void;
}

// Clase abstract: puede tener implementación
abstract class Transporte {
  protected velocidad: number = 0;

  abstract arrancar(): void;

  frenar(): void {
    this.velocidad = 0;
  }

  getVelocidad(): number {
    return this.velocidad;
  }
}

Patrón Template Method

typescript
abstract class Proceso {
  // Template method
  ejecutar(): void {
    this.iniciar();
    this.procesar();
    this.finalizar();
  }

  abstract iniciar(): void;
  abstract procesar(): void;

  finalizar(): void {
    console.log("Proceso completado");
  }
}

class ProcesoCSV extends Proceso {
  iniciar() { console.log("Leyendo CSV"); }
  procesar() { console.log("Parseando datos"); }
}

Ejercicio pratico

Crea una clase abstracta 'Figura' y dos subclases 'Cuadrado' y 'Triangulo'.

exercise.ts
Loading...
Resultado

Haz clic en "Ejecutar" para ver el resultado...

Ir al examen del modulo
Curso de TypeScript — Aprende desde cero