Usar interfaces cuando se esperan cambios frecuentes en el código. Interfaces es un método más flexible que herencia para manejar opciones de comportamiento. Una clase abstracta funciona de manera similar pero además permite definir comportamientos comunes, forzando a las subclases a definir los comportamientos especializados.
Una clase abstracta se parece a una interface en que ambos son una especie de contrato de como se debe compratar la clase en el mundo exterior.
Resumiendo; interfaces permite a una clase tener varios padres, pero una interface no implementa ningun metodo, solo especifica que metodos se deben implementar. Una clase abstracta no se puede instanciar pero puede implementar algunos metodos ( o todos). Interfaces hacen oficial la separación entre implementación y la firma de una clase, mientras que una clase abstracta permite definir comportamiento común, pero por lo mismo es más facil romper el código en cascada al hacer un cambio.
La siguiente tabla compara interfaces y clases abstractas en C#
| Caracteristica | Interface | Abstract class |
| multiherencia | Una clase puede heredar multiples interfaces | Una clase solo puede heredar de una clase abstracta. |
| Implementación por defecto | No. | Si. |
| Constantes | Solo Static final constants. | Se puede estaticas y de instancia. |
| Orientación | La interface define las caracterisiticas perifericas de una clase. | Una clase abstracta define el comportamiento interno de una clase. |
| Homogeneidad | Si las implementaciones solo se parecen en la firma, entonces es mejor usar interfaces. | Si las varias implementaciones usan comportamientos comunes, es mejor usar una clase abstracta. |
| Velocidad | Lento. | Rapido |
| Agregar funcionalidad | Es necesario revisar todas las implementaciones | Se puede agregar el nuevo metodo a la clase abstracta y todas las implementaciones lo incorporan. |
http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html?page=1
Entradas (RSS)