Ir al contenido principal

Diferencias entre clases abstractas e interfaces

¿Diferencias entre clases abstractas e interfaces? 

  • Una clase abstracta, es una clase que contiene métodos tanto concretos como abstractos (métodos sin implementaciones). Un método abstracto debe ser implementado por las subclases de clase abstracta. Las clases abstractas no pueden crearse instancias y deben ampliarse para ser utilizadas.
  • Una interfaz es como un blueprint / contrato de una clase (o puede considerarse como una clase con métodos, pero sin su implementación). Contiene métodos vacíos que representan lo que todas sus subclases deberían tener en común. Las subclases proporcionan la implementación para cada uno de estos métodos. Las interfaces están implementadas.


Aquí hay una compilación útil de varios sitios web para la búsqueda de cuándo usar la interfaz y cuándo usar el resumen

abstract la clase logra la abstracción parcial mientras que interface logra la abstracción total.

abstract El objetivo de una clase es proporcionar una superclase adecuada a partir de la cual otras clases puedan heredar y compartir un diseño común.

Una interface describe un conjunto de métodos que pueden invocarse sobre un objeto pero no proporciona implementaciones concretas para todos los métodos. Una vez que una clase implementa una interfaz, todos los objetos de esa clase tienen una relación is-a con el tipo de interfaz, y se garantiza que todos los objetos de la clase proporcionan la funcionalidad descrita por la interfaz. Esto también se aplica a todas las subclases de esa clase. Las interfaces forman un contrato entre la clase y el mundo exterior, y este contrato se aplica en tiempo de compilación por parte del compilador.

Usa Clase Abstracta y herencia si puedes hacer que la declaración "A sea B". Use interfaces si puede hacer que la declaración "A" sea capaz de [hacer] como ", o también, abstracta de lo que es una clase, interfaz para lo que una clase puede hacer. Podemos decir que un triángulo es un polígono pero no tiene sentido decir que un triángulo es capaz de ser un polígono
Considere usar clases abstractas si alguna de estas afirmaciones se aplica a su situación:
·         Desea compartir el código entre varias clases estrechamente relacionadas.
·         Espera que las clases que amplían su clase abstracta tengan muchos métodos o campos comunes o que requieran modificadores de acceso que no sean públicos (como protegidos y privados).
·         Desea declarar campos no estáticos o no finales. Esto le permite definir métodos que pueden acceder y modificar el estado del objeto al que pertenecen.
Considere usar interfaces si cualquiera de estas afirmaciones se aplica a su situación:
·         Esperas que las clases no relacionadas implementen tu interfaz. Por ejemplo, las interfaces Comparable y Cloneable son implementadas por muchas clases no relacionadas.
·         Desea especificar el comportamiento de un tipo de datos particular, pero no le preocupa quién implementa su comportamiento.
·         Desea aprovechar herencias múltiples.

Comentarios