Si tengo un proyecto que contiene clases similares y algunos pueden utilizar la misma aplicación, pero en la mayoría de los casos la aplicación de su propia manera de manejar los métodos definidos en una interfaz o clase abstracta. Estoy tratando de averiguar si una clase de interfaz/resumen es mejor o no. No entiendo el sentido de una interfaz si puedes usar una clase abstracta con métodos abstractos virtuales.¿Es la misma cosa una interfaz y una clase abstracta con solo métodos abstractos virtuales?
Aquí es una interfaz:
public interface IAthlete
{
void Run();
}
Aquí es una clase abstracta:
public abstract class Athlete
{
public abstract void Run();
}
Aquí es una implementación de la interfaz:
public class Sprinter : IAthlete
{
public void Run()
{
Console.WriteLine("Running Fast....");
}
}
Aquí es una extensión de la clase abstracta:
public class MarathonRunner : Athlete
{
public override void Run()
{
Console.Write("Jogging....");
}
}
Ahora, si decido agregar un método llamado Stop a la interfaz o al método abstracto, Sprinter y MarathonRunner se rompen y dado que puedo proporcionar alguna implementación predeterminada para abstraer, parece una mejor opción. ¿Me estoy perdiendo de algo?
Supongo que estamos hablando de Java aquí. La principal diferencia es que en Java, una clase puede implementar varias interfaces, pero solo puede extender una superclase. Las interfaces son, por lo tanto, un poco más flexibles. –
lo siento C#, actualizaré la etiqueta. – Xaisoft
http://stackoverflow.com/questions/2308786/abstract-classes-and-interfaces-in-c/2308801#2308801 –