Middle
¿En qué casos se debe usar una interfaz y en cuáles una clase abstracta?
sobes.tech AI
Respuesta de la IA
Utilice interfaces para definir contratos de comportamiento que las clases pueden implementar. Esto permite lograr polimorfismo y reduce el acoplamiento entre clases. Una clase puede tener múltiples interfaces, pero solo una clase base.
Utilice clases abstractas cuando tenga una implementación común de parte de la funcionalidad y desee proporcionar una estructura base para las clases derivadas. Las clases abstractas pueden contener métodos abstractos y normales, así como campos. Son apropiadas cuando se requiere herencia "es".
| Característica | Interfaz | Clase abstracta |
|---|---|---|
| Herencia múltiple | Sí | No |
| Implementación | No (hasta .NET 8 con métodos de interfaz predeterminados) | Sí, parcial o completa |
| Campos | No | Sí |
| Constructores | No | Sí |
| Tipo de relación | "puede hacer" ("has-a") | "es" ("is-a") |
Ejemplo de uso de interfaz:
// Definimos un contrato para objetos que pueden volar
public interface IFlyable
{
void Fly();
}
// La clase avión implementa la interfaz IFlyable
public class Airplane : IFlyable
{
public void Fly()
{
// Implementación del vuelo del avión
Console.WriteLine("El avión vuela");
}
}
// La clase pájaro también implementa la interfaz IFlyable
public class Bird : IFlyable
{
public void Fly()
{
// Implementación del vuelo del pájaro
Console.WriteLine("El pájaro vuela");
}
}
Ejemplo de uso de clase abstracta:
// Clase abstracta Animal con implementación común de respiración
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("El animal respira");
}
// Método abstracto que deben implementar las clases derivadas
public abstract void MakeSound();
}
// Clase concreta de perro que hereda de Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("¡Guau!");
}
}
// Clase concreta de gato que hereda de Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("¡Miau!");
}
}