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.