Clases abstractas vs Interfaces en Java primer intento

Hoy me dije a mí mismo: Mi mismo, responda preguntas frecuentes de Java en su blog. De esta manera tendré una base de conocimiento básico para compartir y al mismo tiempo no requiero de responder la misma pregunta varias veces. Cuando alguien me haga una de estas preguntas dijo sencillamente, ¡consulte mi blog!

Una de las preguntas frecuentes que surgen en la POO con Java es la siguiente ¿Cuál es la diferencia entre una clase abstracta y una interface en Java?

Una pregunta de Java sencilla pero no fácil de responder.

Caigo en cuenta que para dar una respuesta digna de mí necesito hablar de clases, instanciación de objetos, herencia, abstracción y polimorfismo.

Ahora bien, para poder mencionar las diferencias empiezo con la siguiente semejanza.

Una interfaz puede considerarse similar una clase completamente abstracta. En muchos casos una interfaz se utiliza de la misma manera que una clase abstracta. De una interfaz o de una clase abstracta no se pueden crear objetos.

¿Y la diferencia?

Como Java no permite herencia múltiple – una clase sólo puede extender una superclase – esto dificulta que una clase se adecue a más de un comportamiento. Una interfaz, por el contrario, permite que una clase implemente una o más interfaces para resolver el problema de mezclar diversos comportamientos en un mismo tipo de objeto.

Una clase abstracta ofrece comportamientos comunes a objetos del mismo tipo a través del mecanismo de la herencia. La implementación de una interfaz permite a un objeto comportamientos que no dependen de su jerarquía de clases.

Una interfaz se diferencia de una clase abstracta porque una interfaz sólo puede contener constantes y métodos abstractos. Una clase abstracta puede contener métodos concretos, una interfaz no.

En una interfaz todos los atributos son por defecto public final static (constantes) y todos los métodos son public abstract. Esto quiere decir que una clase abstracta puede contener atributos variables pero una interfaz no.

Para hacerme entender, necesito contar la historia desde sus inicios y por ello supongo que esto va a necesitar varias entradas para el blog. Acabo de decidir que no empiezo por el Génesis sino más bien por el evangelio de Juan.

Parafraseando a Juan antes ya existía Java. Java era un lenguaje de programación multipropósito y él era orientado a objetos. La POO estaba en Java desde el comienzo. Todo esto comenzó aquí y sin él no se habría hecho esta pregunta. El problema era encontrar la luz de la respuesta para que la oscuridad no pudiera contra ella.

Hubo que empezar por las clases y los objetos que será el próximo tema. Continuara…

Anuncios

8 responses to this post.

  1. Posted by RaZoR on diciembre 10, 2012 at 9:23 pm

    Muy bien todo

    muy explicado

    Responder

  2. Posted by Carlos Luis Bautista on marzo 16, 2013 at 5:43 pm

    Que bien, graxxx a usted eh aclarado mi duda, que tenia sobre la clase abstracta y la interfaz.

    Responder

  3. Excelente artículo, solo que se me generó una duda un poco externa a lo abstracto e interfaces, pero generada por tu artículo, que es la siguiente.

    ¿Cuándo es conveniente utilizar EXTENDS y cuando IMPLEMENTS?

    Responder

    • Posted by kikev on octubre 1, 2013 at 3:40 pm

      Qué buena pregunta, Francisco. Una respuesta simple es: cuando Ud. desea concretar una especificación abstracta tal cual cómo esta diseñada, entonces la implements, es decir sin hacerle cambios a la especificación. Si, por el contrario, lo que necesita Ud. es utilizar como base dicha implementación pero requiere ajustarla a unas necesidades específicas, entonces la extiende (extends). O sea: implements es utilizar tal cual; extends es modificar o cambiar la especificación original pero conservando algunas de sus características.

      Responder

      • Posted by zuritaboris on diciembre 17, 2013 at 9:04 pm

        francisco, se ocupa extends cuando haces referencia a que extiendes de una clase padre(herencia), en cambio implements se ocupa para hacer referencia a una interfaz, saludos

  4. Posted by hoo on mayo 26, 2014 at 2:27 pm

    realmente optimo

    Responder

  5. Posted by renato on septiembre 15, 2016 at 8:30 pm

    muy bien explicado, gracias, donde le pongo like?

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: