Diferencia entre la interfaz y la clase abstracta en Java

Diferencia clave: la interfaz o un protocolo es una forma común que permite que los objetos no relacionados se comuniquen entre sí. Representa un comportamiento acordado que facilita la interacción entre los dos objetos. Una clase abstracta es una clase de objetos que no se pueden crear instancias o instancias de un objeto. Esta clase puede no tener implementación o puede tener implementación incompleta.

Java, C ++, C # son todos los lenguajes de programación complicados que requieren un estudio y comprensión detallados para poder trabajar con ellos. Hay muchos métodos diferentes que se utilizan en estos idiomas que deciden cómo funcionará el idioma. Interface y Abstract Class son dos conceptos confusos que forman parte de OOP (programación orientada a objetos). Estos dos se pueden utilizar individualmente o juntos. Estos dos son completamente diferentes entre sí y se utilizan en diferentes casos.

Java es un lenguaje de programación, que ha sido influenciado por el lenguaje C. Deriva gran parte de su sintaxis de C y C ++, sin embargo, tiene menos facilidades de bajo nivel que cualquiera de ellas. Java es un lenguaje de programación de propósito general que está diseñado para tener menos dependencias de implementación en comparación con los lenguajes anteriores. Es un lenguaje concurrente, basado en clases y orientado a objetos.

Java fue desarrollado por James Gosling en Sun Microsystems y se lanzó en 1995. Originalmente se lanzó como un componente central de la plataforma Java de Sun Microsystems. Sun ha vuelto a licenciar la mayoría de sus tecnologías Java bajo la Licencia Pública General de GNU. Esto significa que toda la tecnología licenciada bajo GNU General Public License es de código abierto y generalmente está disponible de forma gratuita. Sun Microsystems finalmente se fusionó con Oracle Corporation. A partir de 2012, Java se ha convertido en uno de los lenguajes de programación más populares para el uso. Esto es especialmente cierto para las aplicaciones web cliente-servidor. Muchos otros sistemas han desarrollado implementaciones alternativas de tecnologías Sun, como el compilador GNU para Java y Classpath de GNU.

La interfaz o un protocolo es una forma común que permite que los objetos no relacionados se comuniquen entre sí. Representa un comportamiento acordado que facilita la interacción entre los dos objetos. La interfaz contiene la clave de las diversas acciones que se implementan y sirve como enlace entre los dos objetos diferentes. Si una clase de objetos está expuesta a la interfaz, la clase tendría que seguir el comportamiento implementado por la interfaz. Comúnmente, las interfaces solo contienen declaraciones constantes y firmas de métodos. Cualquier interfaz que implemente una interfaz particular debe aplicar todos los métodos mencionados en la interfaz o declararse como una clase abstracta. En Java, cualquier objeto se puede definir como una interfaz, si ese objeto es nulo o contiene una clase en la que implementa esa interfaz en particular. Uno puede implementar múltiples interfaces para una sola clase en Java usando palabras clave de implementación.

Una clase abstracta es una clase de objetos que no se pueden crear instancias o instancias de un objeto. Esta clase puede no tener implementación o puede tener implementación incompleta. También puede tener métodos abstractos o propiedades compartidas por todas las subclases. En algunos lenguajes de programación, los tipos abstractos sin implementación se conocen como interfaces. En Java, se puede crear un tipo abstracto utilizando la palabra clave "abstracto" en la definición de clase. El propósito de tener una clase abstracta para colocar todos los métodos que no están implementados en la clase abstracta y dejar que la subclase determine cómo implementar estas clases. Si una clase tiene un solo método abstracto, la clase debe declararse como una clase abstracta, aunque no es necesario tener al menos un método único para declarar un resumen de clase.

Malliktalksjava.in enumera las principales diferencias entre la interfaz y el resumen como:

  • La clase abstracta tiene el constructor, pero la interfaz no.
  • Las clases abstractas pueden tener implementaciones para algunos de sus miembros (Métodos), pero la interfaz no puede tener implementación para ninguno de sus miembros.
  • Las clases abstractas deben tener subclases que serán inútiles.
  • Las interfaces deben tener implementaciones de otras clases que serán inútiles.
  • Solo una interfaz puede extender otra, pero cualquier clase puede extender una clase abstracta.
  • Todas las variables en las interfaces son finales por defecto
  • Las interfaces proporcionan una forma de herencia múltiple. Una clase puede extender solo una clase más.
  • Las interfaces están limitadas a métodos públicos y constantes sin implementación. Las clases abstractas pueden tener una implementación parcial, partes protegidas, métodos estáticos, etc.
  • Una clase puede implementar varias interfaces. Pero en el caso de una clase abstracta, una clase puede extender solo una clase abstracta.
  • Las interfaces son lentas, ya que requiere una dirección indirecta adicional para encontrar el método correspondiente en la clase real. Las clases abstractas son rápidas.
  • Se permite el modificador de accesibilidad (Público / Privado / interno) para la clase abstracta. La interfaz no permite el modificador de accesibilidad
  • Una clase abstracta puede contener métodos completos o incompletos. Las interfaces solo pueden contener la firma de un método, pero ningún cuerpo. Por lo tanto, una clase abstracta puede implementar métodos, pero una interfaz no puede implementar métodos.
  • Una clase abstracta puede contener campos, constructores o destructores e implementar propiedades. Una interfaz no puede contener campos, constructores o destructores y solo tiene la firma de la propiedad pero no la implementación.
  • Varios modificadores de acceso, como abstractos, protegidos, internos, públicos, virtuales, etc. son útiles en las clases abstractas pero no en las interfaces.
  • El alcance abstracto depende de la clase derivada.
  • El alcance de la interfaz está a cualquier nivel de su cadena de herencia.

La información para la tabla es cortesía de codeproject.com y mindprod.com

Interfaz

Clase abstracta

Herencia múltiple

Una clase puede heredar varias interfaces.

Una clase puede heredar solo una clase abstracta.

Implementación por defecto

Una interfaz no puede proporcionar ningún código, solo la firma.

Una clase abstracta puede proporcionar un código completo, predeterminado y / o solo los detalles que deben anularse.

Modificadores de acceso

Una interfaz no puede tener modificadores de acceso para las subs, funciones, propiedades, etc., todo se asume como público.

Una clase abstracta puede contener modificadores de acceso para las subs, funciones, propiedades.

Núcleo vs. Periférico

Las interfaces se utilizan para definir las habilidades periféricas de una clase. En otras palabras, tanto el Humano como el Vehículo pueden heredar de una interfaz IMvable.

Una clase abstracta define la identidad central de una clase y allí se usa para objetos del mismo tipo.

Homogeneidad

Si varias implementaciones solo comparten firmas de métodos, entonces es mejor usar interfaces.

Si varias implementaciones son del mismo tipo y usan un comportamiento o estado común, es mejor usar la clase abstracta.

Velocidad

Requiere más tiempo para encontrar el método real en las clases correspondientes.

Rápido

Añadiendo funcionalidad

Si agregamos un nuevo método a una Interfaz, entonces tenemos que rastrear todas las implementaciones de la interfaz y definir la implementación para el nuevo método.

Si agregamos un nuevo método a una clase abstracta, tenemos la opción de proporcionar una implementación predeterminada y, por lo tanto, todo el código existente podría funcionar correctamente.

Campos y constantes

No se pueden definir campos en las interfaces.

Una clase abstracta puede tener campos y constantes definidos.

Brevedad

Las constantes declaraciones en una interfaz son todas presuntas públicas estáticas finales.

El código compartido se puede agregar a una clase abstracta.

Constantes

Solo las constantes finales estáticas, se pueden usar sin calificación en las clases que implementan la interfaz.

Tanto las constantes de instancia como las estáticas son posibles. Tanto el código estático como el código de instancia de instancia también son posibles para calcular las constantes.

Conveniencia de terceros

Se puede agregar una implementación de interfaz a cualquier clase de tercero existente.

Una clase de terceros debe reescribirse para extenderse solo desde la clase abstracta.

is-a vs. -able o can-do

Las interfaces a menudo se usan para describir las habilidades periféricas de una clase, no su identidad central, por ejemplo, una clase Automóvil podría implementar la interfaz Reciclable, que podría aplicarse a muchos objetos que no están relacionados en absoluto.

Una clase abstracta define la identidad central de sus descendientes. Las interfaces implementadas enumeran las cosas generales que puede hacer una clase, no las cosas que es una clase.

En un contexto de Java, los usuarios normalmente deben implementar la interfaz Runnable en lugar de extender Thread, ya que no están realmente interesados ​​en proporcionar alguna nueva funcionalidad de Thread, normalmente solo quieren que un código tenga la capacidad de ejecutarse de forma independiente. Quieren crear algo que pueda ejecutarse en un hilo, no un nuevo tipo de hilo. El debate similar is-a vs. has-a surge cuando usted decide heredar o delegar.

Enchufar

El usuario puede escribir un nuevo módulo de reemplazo para una interfaz que no contenga un solo código de código en común con las implementaciones existentes. Cuando el usuario implementa la interfaz, comienza desde cero sin ninguna implementación predeterminada. El usuario tiene que obtener herramientas de otras clases; nada viene con la interfaz más que unas pocas constantes. Esto le da al usuario la libertad de implementar un diseño interno radicalmente diferente.

El usuario debe usar la clase abstracta tal como está para el código base, con todo el equipaje que lo acompaña, bueno o malo. El autor de la clase abstracta ha impuesto estructura al usuario.

Mantenimiento

Si el código del cliente habla solo en términos de una interfaz, puede cambiar fácilmente la implementación concreta detrás de él, utilizando un método de fábrica.

Si el código del cliente habla solo en términos de una clase abstracta, puede cambiar fácilmente la implementación concreta detrás de él, utilizando un método de fábrica.

Recomendado

Artículos Relacionados

  • comparaciones populares: Diferencia entre la Tierra y el Sol.

    Diferencia entre la Tierra y el Sol.

    Diferencia clave: la Tierra y el Sol son totalmente diferentes entre sí. La principal diferencia entre ambos es que la Tierra es un planeta, mientras que el Sol es una estrella. La Tierra es el cuerpo principal más denso del sistema solar. La Tierra gira sobre su eje de oeste a este, y gira alrededor del Sol.
  • comparaciones populares: Diferencia entre democracia y burocracia.

    Diferencia entre democracia y burocracia.

    Diferencia clave : la democracia es una forma de gobierno hecha por el pueblo o sus representantes electos. La burocracia es una forma de gobierno formada por funcionarios y administradores que trabajan para el gobierno. Una burocracia es un cuerpo de funcionarios gubernamentales no electivos y un grupo administrativo de formulación de políticas.
  • comparaciones populares: Diferencia entre el aceite de girasol y el aceite vegetal

    Diferencia entre el aceite de girasol y el aceite vegetal

    Diferencia clave: los aceites son los ingredientes más esenciales y básicos para cocinar. Sustancialmente, el aceite de girasol es un tipo de aceites vegetales; que se obtiene a partir de las semillas de girasol. Mientras que, hay varios tipos de aceites vegetales disponibles en el mercado con cualidades diversas y versátiles. H
  • comparaciones populares: Diferencia entre Nokia Lumia 925 y Nokia Lumia 920

    Diferencia entre Nokia Lumia 925 y Nokia Lumia 920

    Diferencia clave: Nokia ha anunciado recientemente su nuevo teléfono estrella, el Nokia Lumia 925. El teléfono viene con una pantalla táctil capacitiva AMOLED de 4, 5 pulgadas que ocupa una buena cantidad de espacio en la parte frontal, con el altavoz y los sensores en la parte superior. La pantalla capacitiva de 4.5
  • comparaciones populares: Diferencia entre Rotar y Revolver

    Diferencia entre Rotar y Revolver

    Diferencia clave: Rotate y Revolve describen diferentes procesos en conjunto. En términos sencillos, recuerde que la Tierra gira alrededor de su eje y gira alrededor del Sol. Rotar y girar a menudo crea confusión cuando uno trata de definirlos. Hay una diferencia entre girar y girar que muestra cómo está organizado nuestro sistema solar y cómo nuestro planeta se relaciona con él. Segú
  • comparaciones populares: Diferencia entre Punjabi y Sikh

    Diferencia entre Punjabi y Sikh

    Diferencia clave: Punjabi se refiere a la lengua hablada por los habitantes de la región de Punjab, así como a los habitantes de la región. Punjabi también se refiere a la comida étnica de la región, la cultura y las prácticas populares de la región. Sikh es el que sigue al sijismo. En Punjab, el sijismo es una religión que se originó en el siglo XV. Punjabi
  • comparaciones populares: Diferencia entre servidor y host en restaurante

    Diferencia entre servidor y host en restaurante

    Diferencia clave: Un servidor es una persona que sirve una comida comestible. Los camareros en los restaurantes son nombrados como 'Servidores' . Por otro lado, un anfitrión es una persona que entretiene a alguien como su invitado. Una persona que invita a alguien en su hogar se denomina "Anfitrión" .
  • comparaciones populares: Diferencia entre dictadura y fascismo.

    Diferencia entre dictadura y fascismo.

    Diferencia clave: una dictadura es una forma de gobierno en la que un dictador tiene poder completo. El fascismo puede definirse como vivir bajo la dictadura, vivir bajo las ideas de otra persona sin tener libertad propia y derechos limitados. Se puede decir que, dictadura y fascismo son dos caras de una misma moneda, pero hay una diferencia considerable entre las dos ideologías.
  • comparaciones populares: Diferencia entre geología y ecología

    Diferencia entre geología y ecología

    Diferencia clave: la geología es el estudio científico de la Tierra sólida, aunque también puede referirse a cualquier otro cuerpo celeste, las rocas de las que está compuesta y los procesos por los cuales evolucionan. Incluye el estudio de las formas sólidas y líquidas que existen en el planeta. La co

La Elección Del Editor

Diferencia entre estúpido, tonto e idiota

Diferencia clave: estúpido, tonto e idiota se utilizan como jerga para referirse a alguien o algo que carece de inteligencia o sentido común. Sin embargo, hay algunas pequeñas diferencias contextuales en la forma en que se utilizan. Los términos estúpido, tonto e idiota son palabras que a menudo se usan como sinónimos. La c