Ya no tienes que investigar más por todo internet ya que llegaste al sitio justo, poseemos la solución que quieres pero sin complicaciones.
Solución:
Las interfaces son para cuando quieres decir “No me importa cómo lo hagas, pero esto es lo que necesitas hacer”.
Las clases abstractas son para cuando quieres decir “Sé lo que debes hacer y sé cómo debes hacerlo en algunos / muchos de los casos”.
Las clases abstractas tienen serios inconvenientes. Por ejemplo:
class House
class Boat
class HouseBoat extends /* Uh oh!! */
// don't get me started on Farmer's Insurance "Autoboathome" which is also a helicopter
Puede pasar a través de una interfaz:
interface Liveable
interface Floatable
class HouseBoat implements Liveable, Floatable
Ahora, las clases abstractas también son muy útiles. Por ejemplo, considere la clase AbstractCollection. Define el comportamiento predeterminado para métodos muy comunes para todas las colecciones, como isEmpty()
y contains(Object)
. Puede anular estos comportamientos si lo desea, pero … ¿es realmente probable que cambie el comportamiento para determinar si una colección está vacía? Normalmente va a ser size == 0
. (¡Pero puede marcar una gran diferencia! A veces el tamaño es costoso de calcular, pero determinar si algo está vacío o no es tan fácil como mirar el primer elemento).
Y dado que no cambiará a menudo, ¿realmente vale la pena el tiempo del desarrollador para implementar ese método cada … solo … vez … para cada método en esa categoría “resuelto”? Sin mencionar cuando necesita hacer un cambio, tendrá duplicación de código y errores perdidos si tuviera que volver a implementarlo en todas partes.
Las interfaces son útiles porque Java no tiene herencia múltiple (pero puede implementar tantas interfaces como desee).
Las clases abstractas son útiles cuando necesitas un comportamiento concreto de la clase base.
Los hechos son-
- Java no admite herencia múltiple
- Se pueden implementar múltiples interfaces
- Se pueden implementar pocos métodos en una clase abstracta
Estos hechos pueden usarse para inclinar la ventaja a favor de interfaces o clases abstractas.
Si hay más de un comportamiento que una clase debe compartir con otras clases, las interfaces ganan. Si una definición de método tiene que ser compartida / anulada con otras clases, las clases abstractas ganan.
Comentarios y puntuaciones
Tienes la opción de añadir valor a nuestra información tributando tu veteranía en las observaciones.