Sobes.tech
Junior — Middle

Qual é a diferença entre usar uma classe abstrata e uma interface ao definir contratos para classes?

sobes.tech IA

Resposta da IA

Uma classe abstrata e uma interface em C# servem para definir contratos, mas têm diferenças-chave:

  • Classe abstrata pode conter implementação de métodos, campos, construtores e propriedades. É usada quando se deseja estabelecer uma implementação base e funcionalidade comum para os herdeiros.
  • Interface define apenas as assinaturas de métodos, propriedades e eventos sem implementação (até C# 8.0; a partir do C# 8.0, interfaces podem conter implementação padrão).

Além disso, uma classe pode herdar de apenas uma classe abstrata, mas pode implementar múltiplas interfaces.

Exemplo:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Dormindo"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Cantar"); }
    public void Fly() { Console.WriteLine("Voando"); }
}

Assim, a classe abstrata é adequada para comportamentos básicos comuns, e a interface para definir um conjunto de capacidades que podem ser implementadas por diferentes classes.