Interfaz vs clase abstracta (OO general)
Frecuentes
Visto 719,049 equipos
1457
Recientemente tuve dos entrevistas telefónicas en las que me preguntaron sobre las diferencias entre una interfaz y una clase abstracta. Les he explicado todos los aspectos que se me ocurren, pero parece que están esperando que les mencione algo específico y no sé qué es.
Desde mi experiencia, creo que lo siguiente es cierto. Si me falta un punto importante, hágamelo saber.
Interfaz:
Cada uno de los métodos declarados en una interfaz deberá 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 herencia múltiple en C #.
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?
Otro entrevistador me preguntó qué pasaría si tuvieras una variable pública dentro de la interfaz, ¿en qué se diferenciaría de la clase abstracta? Insistí en que no puedes tener una variable pública dentro de una interfaz. No sabía lo que quería oír, pero tampoco estaba satisfecho.
Vea también:
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas oop interface abstract-class or haz tu propia pregunta.
Si bien creo que es importante saber la diferencia entre los dos, esta no es una buena pregunta para la entrevista, en mi opinión. A menos que el trabajo fuera escribir un libro sobre temas orientados a objetos. Es mejor que no trabajes para esos murciélagos. - Alan
@Alan: De hecho, me gusta esto como una pregunta de entrevista, pero no acosaría a nadie de esta manera al respecto; probablemente lo publicaría más como "¿Dónde elegirías una interfaz sobre una clase base abstracta, al definir una jerarquía? ", o algo similar. - Reed Copsey
Tal vez buscaban una respuesta más centrada en el diseño ... aunque, como tú, lo habría tratado como una cuestión técnica. - CurtainDog
Buenas diferencias tabulares aquí: mindprod.com/jgloss/interfacevsabstract.html - Rajat_R
@Kave:
I insisted you can't have a public variable inside an interface.
Creo que la interfaz puede tener una variable pública. De hecho, las variables en la interfaz son automáticamente públicas y definitivas. - a Learner