Saltar al contenido principal

Diferencias con las clases abstractas

En muchos casos una interfaz es muy similar a una clase abstracta, pero tienen sus diferencias que mostramos en la siguiente tabla:

CaracterísticasClase abstractaInterfaz
DefiniciónClase que puede contener métodos abstractos y métodos concretos.Conjunto de métodos abstractos (en Java 8+ puede tener métodos por defecto y estáticos).
Métodos concretosPuede tener métodos concretos (con implementación).Sólo métodos abstractos hasta Java 7. Desde Java 8, puede tener métodos por defecto y estáticos.
AtributosPuede tener atributos con visibilidad y pueden ser variables normales.Todos los campos son public static final (constantes).
Herencia múltipleNo soporta herencia múltiple.Una clase puede implementar varias interfaces.
ConstructorPuede tener constructor.No puede tener constructor.
RelaciónRelación "es un tipo de".Relación "puede hacer".
FlexibilidadÚtil para compartir código común entre clases relacionadas.Útil para definir contratos que deben ser implementados por diferentes clases.

¿Cuándo usar una clase abstracta?

  • Se usa cuando existe una relación "es un tipo de" entre las clases. Por ejemplo, Ave como clase abstracta para clases como Loro o Paloma.
  • Quieres definir comportamiento común que será compartido entre subclases.
  • Necesitas definir atributos de instancia y métodos concretos junto con métodos abstractos.

¿Cuándo usar interfaces?

  • Se usa cuando existe una relación "puede hacer" o para definir un contrato común para clases no relacionadas.
  • Es ideal cuando necesitas herencia múltiple, ya que una clase puede implementar varias interfaces.
  • Quieres definir sólo métodos que las clases deben implementar, sin preocuparte por la implementación predeterminada (a no ser que uses métodos por defecto).