¿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
Publicar un comentario