utilizar una clase abstracta si tiene alguna funcionalidad que desea es subclases a tener. Por ejemplo, si tiene un conjunto de funciones que quiere que tengan todas las subclases de la clase abstracta de base.
Utilice una interfaz si solo desea un contrato general de comportamiento/funcionalidad. Si tiene una función u objeto que desea tomar en un conjunto de objetos diferentes, use una interfaz. Luego puede cambiar el objeto que se pasa, sin cambiar el método ni el objeto que lo está tomando.
Las interfaces suelen ser sueltas, en comparación con las clases abstractas. No querrá utilizar interfaces en una situación en la que escribe constantemente el mismo código para todos los métodos de la interfaz. Use una clase abstracta y defina cada método una vez.
Además, si está intentando crear una jerarquía de herencia de objetos específica, realmente no querría intentar hacer eso solo con interfaces.
También, de nuevo, en algunos idiomas solo puede tener una única clase base, y si un objeto ya tiene una clase base, tendrá que hacer algunas refactorizaciones para usar una clase base abstracta. Esto puede o no significar que quizás prefieras usar una interfaz.
Como señala @tvanfosson, no es una mala idea usar muchas interfaces, cuando realmente entiendes las clases y las interfaces abstractas, en realidad no es una situación cualquiera. Una situación particular podría usar tanto clases abstractas e interfaces como ninguna de las dos. Me gusta usar las interfaces a veces simplemente para restringir a qué puede acceder un método u objeto en un objeto de parámetro transferido.
dupe: http://stackoverflow.com/questions/56867/interface-vs-base-class – juan
es ligeramente diferente porque se refiere a las clases base abstractas, en lugar de a todas las clases base. –
Quitaría el enlace duplicado, pero no tengo ese nivel de acceso –