Interfaz vs Clase Abstracta (general OO)


He tenido recientemente dos entrevistas telefónicas donde me han preguntado sobre las diferencias entre una Interfaz y una clase Abstracta. He explicado cada aspecto de ellos que se me ocurrió, pero parece que están esperando que mencione algo específico, y no se lo que es.

Por mi experiencia creo que lo siguiente es cierto. Si me estoy perdiendo un punto importante por favor hágamelo saber.

Interfaz:

Cada método declarado en una Interfaz será deben implementarse en la subclase. Solo pueden existir Eventos, Delegados, Propiedades (C#) y Métodos en una Interfaz. Una clase puede implementar múltiples interfaces.

Clase Abstracta:

Solo los métodos abstractos deben ser implementados por la subclase. Una clase abstracta puede tener métodos normales con implementaciones. La clase abstracta también puede tener variables de clase además de Eventos, Delegados, Propiedades y Métodos. Una clase solo puede implementar una clase abstracta solo debido a la inexistencia de Multi-herencia en C#.

  1. Después de todo eso, al entrevistador se le ocurrió la pregunta "¿Qué pasaría si tuvieras una clase abstracta con solo métodos abstractos? ¿En qué se diferenciaría eso de una interfaz?"No sabía la respuesta, pero creo que es la herencia como se mencionó anteriormente, ¿verdad?

  2. Otro entrevistador me preguntó qué pasaría si tuvieras una variable pública dentro de la interfaz, ¿en qué se diferenciaría eso de la Clase Abstracta? Insistí en que no puedes tener un variable pública dentro de una interfaz. No sabía lo que quería oír, pero tampoco estaba satisfecho.

Véase También :


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52