Junior — Middle
¿En qué consiste la diferencia entre usar una clase abstracta y una interfaz al definir contratos para clases?
sobes.tech AI
Respuesta de la IA
Una clase abstracta y una interfaz en C# sirven para definir contratos, pero tienen diferencias clave:
- Clase abstracta puede contener implementaciones de métodos, campos, constructores y propiedades. Se usa cuando se necesita establecer una implementación base y funcionalidad común para los herederos.
- Interfaz solo define las firmas de métodos, propiedades y eventos sin implementación (hasta C# 8.0; a partir de C# 8.0, las interfaces pueden contener implementaciones por defecto).
Además, una clase solo puede heredar de una clase abstracta, pero puede implementar múltiples interfaces.
Ejemplo:
abstract class Animal
{
public abstract void MakeSound();
public void Sleep() { Console.WriteLine("Durmiendo"); }
}
interface IFlyable
{
void Fly();
}
class Bird : Animal, IFlyable
{
public override void MakeSound() { Console.WriteLine("Cantar"); }
public void Fly() { Console.WriteLine("Volando"); }
}
De esta forma, la clase abstracta es adecuada para comportamientos básicos comunes, y la interfaz para definir un conjunto de capacidades que pueden ser implementadas por diferentes clases.