Interfaz vs clase abstracta en Java: ¿Cuál es la diferencia?

¿Qué es la interfaz?

La interfaz es un modelo que se puede utilizar para implementar una clase. La interfaz no contiene ningún método concreto (métodos que tienen código). Todos los métodos de una interfaz son métodos abstractos.

No se puede crear una instancia de una interfaz. Sin embargo, se pueden crear instancias de clases que implementan interfaces. Las interfaces nunca contienen variables de instancia, pero pueden contener variables finales estáticas públicas (es decir, variables de clase constantes)

¿Qué es la clase abstracta?

Una clase que tiene la palabra clave abstracta en su declaración se llama clase abstracta. Las clases abstractas deben tener al menos un método abstracto. , es decir, métodos sin cuerpo. Puede tener múltiples métodos concretos.

Las clases abstractas le permiten crear planos para clases concretas. Pero la clase heredera debería implementar el método abstracto.

No se pueden crear instancias de clases abstractas.

Razones importantes para utilizar interfaces

  • Las interfaces se utilizan para lograr la abstracción.
  • Diseñado para admitir la resolución de métodos dinámicos en tiempo de ejecución
  • Le ayuda a lograr un acoplamiento suelto.
  • Le permite separar la definición de un método de la jerarquía de herencia

Razones importantes para usar la clase abstracta

  • Las clases abstractas ofrecen una funcionalidad predeterminada para las subclases.
  • Proporciona una plantilla para futuras clases específicas.
  • Le ayuda a definir una interfaz común para sus subclases.
  • La clase abstracta permite la reutilización del código.

Interfaz vs. Clase abstracta

Una clase abstracta le permite crear una funcionalidad que las subclases pueden implementar o anular, mientras que una interfaz solo le permite indicar la funcionalidad, pero no implementarla. Una clase puede extender solo una clase abstracta, mientras que una clase puede implementar múltiples interfaces.

Parámetros Interfaz Clase abstracta
Velocidad Lento Rápido
Herencias múltiples Implementar varias interfaces Solo una clase abstracta
Estructura Métodos abstractos Métodos abstractos y concretos
Cuándo usar Mejora futura Para evitar la independencia
Herencia / Implementación Una clase puede implementar múltiples interfaces La clase puede heredar solo una clase abstracta
Implementación predeterminada Mientras se agregan cosas nuevas a la interfaz, es una pesadilla encontrar todos los implementadores e implementar las cosas recién definidas. En el caso de la clase abstracta, puede aprovechar la implementación predeterminada.
Modificadores de acceso La interfaz no tiene modificadores de acceso. Todo lo definido dentro de la interfaz se asume como modificador público. La clase abstracta puede tener un modificador de acceso.
Cuándo usar Es mejor usar la interfaz cuando varias implementaciones comparten solo la firma del método. Jerarquía polimórfica de tipos de valores. Debe usarse cuando varias implementaciones del mismo tipo comparten un comportamiento común.
Campos de información la interfaz no puede contener campos de datos. la clase puede tener campos de datos.
Herencia múltiple predeterminada Una clase puede implementar numerosas interfaces. Una clase hereda solo una clase abstracta.
Implementación Una interfaz es abstracta, por lo que no puede proporcionar ningún código. Una clase abstracta puede proporcionar un código completo y predeterminado que debe anularse.
Uso de modificadores de acceso No puede utilizar modificadores de acceso para el método, las propiedades, etc. Puede utilizar una clase abstracta que contenga modificadores de acceso.
Uso Las interfaces ayudan a definir las habilidades periféricas de una clase. Una clase abstracta define la identidad de una clase.
Campos definidos No se pueden definir campos Una clase abstracta le permite definir tanto campos como constantes
Herencia Una interfaz puede heredar múltiples interfaces pero no puede heredar una clase. Una clase abstracta puede heredar una clase y múltiples interfaces.
Constructor o destructores Una interfaz no puede declarar constructores o destructores. Una clase abstracta puede declarar constructores y destructores.
Límite de extensiones Puede ampliar cualquier número de interfaces. Puede extender solo una clase o una clase abstracta a la vez.
Palabra clave abstracta En una palabra clave de interfaz abstracta, es opcional para declarar un método como abstracto. En una clase abstracta, la palabra clave abstracta es obligatoria para declarar un método como abstracto.
Tipo de clase Una interfaz solo puede tener métodos abstractos públicos. Una clase abstracta tiene métodos abstractos protegidos y públicos.

Código de muestra para interfaz y clase abstracta en Java

A continuación se muestra un código de muestra para crear una interfaz y una clase abstracta en Java

Sintaxis de la interfaz

interface name{//methods}

Ejemplo de interfaz Java:

interface Pet {public void test();}class Dog implements Pet {public void test() {System.out.println("Interface Method Implemented");}public static void main(String args[]) {Pet p = new Dog();p.test();}}

Sintaxis de clase abstracta

abstract class name{// code}

Ejemplo de clase abstracta:

abstract class Shape {int b = 20;abstract public void calculateArea();}public class Rectangle extends Shape {public static void main(String args[]) {Rectangle obj = new Rectangle();obj.b = 200;obj.calculateArea();}public void calculateArea() {System.out.println("Area is " + (obj.b * obj.b));}}

Articulos interesantes...