Sobes.tech
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.