Diferencias entre la clase abstracta y la interfaz en Java
Resumen clase vs interfaz en Java
Para comprender las diferencias entre la clase abstracta y la interfaz en Java, es importante, en primer lugar, entender cada uno de estos de forma independiente. La clase abstracta en Java se utiliza en la declaración de subclases con un conjunto de características comunes. El uso común de la clase abstracta es una súper clase de otras clases que, en efecto, le permite extender la clase abstracta. Una palabra clave abstracta se utiliza en la declaración de una clase abstracta. Al igual que cualquier otra clase, la clase abstracta tiene campos que describen métodos y características que la clase puede realizar. Por la mera declaración de una clase abstracta, la clase no puede ser iniciada.
Una interfaz Java puede equipararse a un protocolo. Representa un comportamiento preestablecido y acordado que permite la facilitación de la interacción de objetos no relacionados. Dependiendo del usuario, la interfaz guarda la clave de las diferentes acciones que se implementan. La interfaz, por lo tanto, sirve como un enlace entre el productor y el consumidor. Las interfaces en Java son, por lo tanto, un grupo de métodos que contienen cuerpos vacíos que pueden tener declaraciones constantes. Al exponer una clase a la interfaz de Java, significa que el comportamiento esperado de la clase es la implementación de todos los métodos de la interfaz.
Diferencias
En primer lugar, una clase abstracta permite que los campos no sean estáticos o finales, a diferencia de los campos estáticos y finales utilizados en las interfaces. Las interfaces no pueden tener ningún código de implementación usado en ellas, y puede haber un código de implementación usado en la clase abstracta. Los códigos de Implementación desplegados en la clase abstracta pueden tener algunos o todos los métodos implementados. Por defecto, todos los métodos de la interfaz son "abstractos". La visibilidad también es posible para los métodos o miembros de una clase abstracta que pueden variar, como público, protegido, privado o ninguno. La visibilidad de la interfaz, por otro lado, solo se puede preestablecer para un modo de visibilidad que es "público". Una clase abstracta heredará automáticamente la clase de objeto. Esto, en efecto, significa que se incluyen métodos como clone () y equals (). En una interfaz, no es posible la herencia de la clase de objeto. Después de esto, la clase abstracta tiene la capacidad de tener un constructor, pero una interfaz no puede tener uno. La interfaz en Java también tiene una función muy importante con la implementación de múltiples herencias, ya que una clase solo puede tener una súper clase. Aunque solo puede estar presente una superclase, puede implementarse en cualquier número de interfaces. No es posible tener múltiples herencias en una clase abstracta. En el rendimiento, las interfaces tienden a ser más lentas en la implementación en comparación con la clase abstracta, principalmente debido a la dirección adicional de encontrar el método correspondiente en una clase. Sin embargo, la diferencia se ha vuelto más lenta debido a las máquinas virtuales Java modernas que se actualizan continuamente. Agregar un método en una interfaz requiere que rastree todas las clases de implementación que implementan la interfaz específica. Alternativamente, puede extender la interfaz para permitirle tener métodos adicionales. Si está tratando con una clase abstracta, todo lo que se requiere es agregar la implementación predeterminada del método y el código continúa funcionando. Dado que existen diferencias entre las clases abstractas y las interfaces, es importante tener en cuenta que no son rivales, pero las diferencias aquí mencionadas sirven para complementarse entre sí. Resumen Los campos de clase abstracta no son estáticos o finales, a diferencia de la interfaz que tiene tablas estáticas y finales. Ningún código de implementación se puede usar en las interfaces mientras que se puede usar en la clase abstracta. La visibilidad de la interfaz solo puede ser pública, mientras que la visibilidad de clase abstracta puede variar. Una clase abstracta heredará automáticamente la clase de objeto, pero no es posible en la interfaz. La clase abstracta es más rápida que la interfaz en la implementación.