
Luis Ponce
PreguntaNo entiendo beneficio de usar interface si de todas forma se debe implementar el codigo del metodo de la interface en cada clase hija?

David Cruz Zavaleta
Las interfaces no son para herencia múltiple, ojo con eso. Es una explicación muy repetida pero equivocada.
Una interface puedes entenderla como un contrato, y las clases que la implementen, tienen que cumplir con ese contrato, independientemente de los detalles de su implementación.
Por ejemplo la siguiente interface define un contrato que cualquiera que desee ser Mesero, debe implementar:
public interface IMesero
{
void TomaLaOrden();
}
Cada clase que implemente la interfaz debe cumplir el contrato y contar con un método para "Tomar la orden". Por ejemplo, de forma muy simplificada:
public class David: IMesero
{
public void TomaLaOrden()
{
Console.Writeline("Yo soy amable al tomar la orden y la paso a cocina");
}
}
public class Uriel: IMesero
{
public void TomaLaOrden()
{
Console.Writeline("Yo me tardo mucho al tomar la orden y la paso a cocina");
}
}
public class Juan: IMesero
{
public void TomaLaOrden()
{
Console.Writeline("Yo soy muy rapido al tomar la orden y la paso a cocina");
}
}
Como puedes ver, no tiene nada que ver con herencia, pues tienes que implementar toda la lógica necesaria para cumplir con el contrato que define la interface.
Sin embargo, teniendo esas clases definidas la lógica de tu aplicación podría trabajar siempre contra la interface "IMesero", sin importar si se llama David, Uriel o Juan. Por que sabes que todos ellos tienen que ser capaces de "Tomar la Orden" y pasarla a cocina, sin importar como lo hagan, ni los detalles intermedios que realicen para cumplir el objetivo.
Esto te lleva a código desacoplado al trabajar contra abstracciones en vez de implementaciones específicas y a futuro te permite extender, mantener y realizar pruebas unitarias de forma mucho más sencilla con cuestiones como dependency injection, o el principio open/closed.

Gabriel Fernandez
En el curso avanzado cuando explica la metodología SOLID es donde ves su uso real a parte de la herencia multiple. Por lo menos a mi me quedó muy claro en ese video te lo recomiendo

Juan Carlos Ruiz Pacheco
El punto es desacoplar el código, hacerlo extensible, reutilizable y fácil de mantener. Si muchas clases , incluso de familias diferentes, implementan la misma interfaz, esto te permitirá crear una misma pieza de código que funcionará con multiples objetos diferentes, sin las interaces a la final tendrías que crear muchas versiones similares del mismo código, una por cada clase objeto. El punto en POO es reutilizar tanto código como sea posible, si el algoritmo para hacer algunas cosas es practicamente el mismo probablemente puedes usar interfaces para abstraer la funcionalidad y programar una sola vez contra la interface y no múltiples veces contra las implementaciones específicas.

Armando
Al definir una clase interface lo haces para ahorrar código, evitas escribir en cada clase que ocupes la cabecera del método. En cada clase que mandes a llamar los métodos de esa interface defines tú su comportamiento