Middle
Em que casos deve usar uma interface e em quais uma classe abstrata?
sobes.tech IA
Resposta da IA
Utilize interfaces para definir contratos de comportamento que as classes podem implementar. Isto permite alcançar polimorfismo e reduzir o acoplamento entre classes. Uma classe pode ter múltiplas interfaces, mas apenas uma classe base.
Utilize classes abstratas quando tiver uma implementação comum de parte da funcionalidade e desejar fornecer uma estrutura base para classes derivadas. As classes abstratas podem conter métodos abstratos e normais, bem como campos. São adequadas quando é necessária herança "é".
| Característica | Interface | Classe abstrata |
|---|---|---|
| Herança múltipla | Sim | Não |
| Implementação | Não (até ao .NET 8 com métodos de interface padrão) | Sim, parcial ou completa |
| Campos | Não | Sim |
| Construtores | Não | Sim |
| Tipo de relação | "pode fazer" ("has-a") | "é" ("is-a") |
Exemplo de uso de interface:
// Definir um contrato para objetos que podem voar
public interface IFlyable
{
void Fly();
}
// A classe avião implementa a interface IFlyable
public class Airplane : IFlyable
{
public void Fly()
{
// Implementação do voo do avião
Console.WriteLine("O avião voa");
}
}
// A classe pássaro também implementa a interface IFlyable
public class Bird : IFlyable
{
public void Fly()
{
// Implementação do voo do pássaro
Console.WriteLine("O pássaro voa");
}
}
Exemplo de uso de classe abstrata:
// Classe abstrata Animal com implementação comum de respiração
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("O animal respira");
}
// Método abstrato que deve ser implementado pelas classes derivadas
public abstract void MakeSound();
}
// Classe concreta de cão que herda de Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Au!");
}
}
// Classe concreta de gato que herda de Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miau!");
}
}