Las clases abstractas y las interfaces son dos conceptos fundamentales que permiten definir contratos y estructuras que otros componentes pueden implementar.
| Característica | Clase Abstracta | Interfaz |
|---|---|---|
| Métodos | Puede tener métodos abstractos y concretos | Solo métodos abstractos (sin implementación) |
| Herencia | Herencia simple | Implementación múltiple |
| Estado | Puede contener variables de instancia | No puede contener variables de instancia (solo declaraciones) |
| Constructores | Puede tener constructores | No puede tener constructores |
| Modificadores de Acceso | Puede definir modificadores de acceso | Métodos son implícitamente públicos |
Una clase abstracta en TypeScript es similar a las clases abstractas en otros lenguajes. No se puede instanciar directamente y puede contener tanto métodos abstractos (sin implementación) como métodos concretos (con implementación).
Ejemplo:
// Clase abstracta
abstract class Animal {
abstract makeSound(): void; // Método abstracto
sleep(): void { // Método concreto
console.log("Sleeping...");
}
}
// Clase concreta que extiende la clase abstracta
class Dog extends Animal {
makeSound(): void {
console.log("Bark");
}
}
// Uso de la clase concreta
const myDog = new Dog();
myDog.makeSound(); // Salida: Bark
myDog.sleep(); // Salida: Sleeping...
Una interfaz en TypeScript define un contrato que las clases pueden implementar. Solo contiene declaraciones de métodos y propiedades, sin implementación. Las clases que implementan una interfaz deben proporcionar la implementación de los métodos definidos en la interfaz.
Ejemplo:
// Interfaz
interface Pet {
play(): void;
}
// Clase concreta que implementa la interfaz
class Cat implements Pet {
play(): void {
console.log("Playing with a ball of yarn");
}
}
// Uso de la clase que implementa la interfaz
const myCat = new Cat();
myCat.play(); // Salida: Playing with a ball of yarn