Diferencia entre interfaz y clase abstracta java

Diferencia entre interfaz y clase abstracta c#

Desde que el JDK 8 ha permitido métodos concretos (no abstractos) en la interfaz como los métodos por defecto y estáticos, muchos de mis lectores me han preguntado cómo deben responder a las clásicas preguntas de clase abstracta vs interfaz. Antes, una interfaz no podía tener métodos concretos y esa era la principal diferencia entre clase abstracta e interfaz, pero ahora no es así. En este post, revisaré esta pregunta tan popular en las entrevistas de Java a la luz de los cambios en Java 8. Esta es también una pregunta muy popular en las entrevistas de Java y conocer la diferencia te ayudará a responder esta pregunta en una entrevista real.

Como he dicho, antes de JDK 8, el nivel de abstracción era la diferencia clara entre la clase abstracta y la interfaz como la interfaz era la forma más pura de Abstracción que sólo define lo que la interfaz se supone que debe hacer sin especificar cómo deben ser implementados, en otras palabras, sólo declara los métodos de la API y deja la implementación a sus subclases.

Pero, la principal diferencia entre una clase abstracta y una interfaz en Java 8 es el hecho de que una clase abstracta es una clase y una interfaz es una interfaz. Una clase puede tener un estado que puede ser modificado por métodos no abstractos pero una interfaz no puede tener el estado porque no pueden tener variables de instancia.

Interfaz y clase abstracta java

IntroducciónLas clases abstractas pueden expresar el mismo conjunto de afirmaciones que las interfaces, como la definición de métodos abstractos que esperamos que se definan en la clase implementadora. Pero hay buenas razones para preferir una sobre la otra. Este artículo explora el quid de la cuestión al discutir la forma correcta de utilizar las interfaces y las clases abstractas.

  Como instanciar una clase en java

Interfaces en JavaUna interfaz detalla el contrato de la clase que la implementa. Podemos pensar en ella como si escribiera sus expectativas sobre la clase que pretende implementar su interfaz. En otras palabras, una interfaz articula el acuerdo que usted espera de la clase implementadora para conformarse.Las interfaces contienen una descripción de alto nivel de los conceptos que expresan su significado desambiguado cuando se está definiendo. Las interfaces contienen una descripción de alto nivel de los conceptos que expresan su significado desambiguado cada vez que se definen.

En el ejemplo anterior, demostramos cómo se pueden declarar las interfaces y cómo se espera que las clases implementadoras definan el significado de onLeft(), onRight(), onAbove() y onBelow() en el contexto de las clases Car y Robot. Como hemos observado, los controles remotos presentan una interfaz al usuario, y nuestra tarea como implementadores es sostener el significado de las acciones definidas en la interfaz en diferentes contextos.Propiedades de una interfazInterfaz pública GroupedInterface extends Interface1, Interface2, Interface3 {

Diferencias entre clase abstracta e interfaz

Los tutoriales de Java han sido escritos para el JDK 8. Los ejemplos y las prácticas que se describen en esta página no aprovechan las mejoras introducidas en versiones posteriores y pueden utilizar tecnología que ya no está disponible.Consulte los cambios en el lenguaje de Java para obtener un resumen de las características actualizadas del lenguaje en Java SE 9 y las versiones posteriores.Consulte las notas de la versión del JDK para obtener información sobre las nuevas características, las mejoras y las opciones eliminadas o obsoletas de todas las versiones del JDK.

  Clases particulares java

Cuando se subclasifica una clase abstracta, la subclase suele proporcionar implementaciones para todos los métodos abstractos de su clase padre. Sin embargo, si no lo hace, la subclase también debe ser declarada abstracta.

Las clases abstractas son similares a las interfaces. No se pueden instanciar, y pueden contener una mezcla de métodos declarados con o sin implementación. Sin embargo, con las clases abstractas, puedes declarar campos que no sean estáticos y finales, y definir métodos concretos públicos, protegidos y privados. Con las interfaces, todos los campos son automáticamente públicos, estáticos y finales, y todos los métodos que se declaran o definen (como métodos por defecto) son públicos. Además, sólo puedes extender una clase, sea o no abstracta, mientras que puedes implementar cualquier número de interfaces.

Ejemplo de interfaz y clase abstracta de Java

Las clases abstractas y las interfaces abundan en el código Java, e incluso en el propio kit de desarrollo de Java (JDK). Muchos desarrolladores creen que las interfaces y las clases abstractas son similares, pero en realidad son bastante diferentes. Exploremos las principales diferencias entre ellas.La esencia de una interfazEn el fondo, una interfaz es un contrato, por lo que depende de una implementación para cumplir su propósito. Una interfaz nunca puede tener un estado, por lo que no puede utilizar variables de instancia mutables. Una interfaz sólo puede usar variables finales.Cuando usar interfacesLas interfaces son muy útiles para desacoplar código e implementar polimorfismo. Podemos ver un ejemplo en el JDK, con la interfaz List:

  Clase math java

Como habrás notado, este código es corto y muy descriptivo. Podemos ver fácilmente la firma del método, que usaremos para implementar los métodos de la interfaz usando una clase concreta.La interfaz List contiene un contrato que puede ser implementado por las clases ArrayList, Vector, LinkedList, y otras.Para usar el polimorfismo, podemos simplemente declarar nuestro tipo de variable con List, y luego elegir cualquiera de las instancias disponibles. He aquí un ejemplo:

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad