Middle
¿Para qué sirven las interfaces si ya existen clases abstractas?
sobes.tech AI
Respuesta de la IA
- Herencia múltiple. Una clase puede implementar varias interfaces, pero solo heredar de una clase (incluyendo abstractas).
interface IDrivable {} interface IFlyable {} class Car : IDrivable {} // Hereda solo de una clase (object implícitamente) class FlyingCar : IDrivable, IFlyable {} // Implementa varias interfaces - Contrato sin implementación. Las interfaces definen solo un contrato (métodos, propiedades, eventos, indexadores) sin ninguna implementación. Las clases abstractas pueden contener funcionalidad parcialmente implementada y campos.
interface IShape { double GetArea(); // Solo declaración } abstract class Shape { public abstract double GetArea(); // Declaración public string Color { get; set; } // Implementación de propiedad public void DisplayColor() { Console.WriteLine($"Color: {Color}"); // Método implementado } } - Acoplamiento débil (loose coupling). Las interfaces fomentan un acoplamiento débil entre componentes, ya que el código depende del contrato, no de la implementación concreta de la clase. Esto facilita reemplazar una implementación por otra.
- Separación de roles. Las interfaces permiten definir roles o capacidades claras que una clase debe tener, independientemente de su tipo principal o jerarquía de herencia.
- Pruebas. Los mocks y stubs para pruebas unitarias a menudo se crean basándose en interfaces, no en clases abstractas, ya que estas pueden tener dependencias o lógica interna compleja.
Resumiendo: las interfaces proporcionan un mecanismo flexible para definir contratos y lograr polimorfismo sin las restricciones de herencia de una única clase base, mientras que las clases abstractas están destinadas a proporcionar una implementación parcial y funcionalidad básica que será complementada en clases derivadas.