Diferencia entre clase abstracta e interfaz en Java

Diferencia clave entre clase abstracta e interfaz en Java

  • En Interface, una clase puede implementar mรบltiples interfaces, mientras que la clase puede heredar solo una clase abstracta.
  • En Interfaz no tiene modificadores de acceso. Se supone que todo lo definido dentro de la Interfaz tiene un modificador pรบblico, mientras que la Clase Abstracta puede tener un modificador de acceso.
  • La interfaz no puede contener campos de datos, mientras que la clase abstracta puede tener campos de datos.
  • Las interfaces ayudan a definir las habilidades perifรฉricas de una clase, mientras que una clase abstracta define la identidad de una clase.

Interfaz vs clase abstracta en Java

ยฟQuรฉ es una clase abstracta?

Una clase que tiene la palabra clave abstract en su declaraciรณn se llama clase abstracta. Las clases abstractas deben tener cero o mรกs mรฉtodos abstractos, 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 heredada debe implementar el mรฉtodo abstracto. Las clases abstractas no se pueden instanciar.

Razones importantes para utilizar interfaces

  • Las interfaces se utilizan para lograr 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 flojo.
  • Le permite separar la definiciรณn de un mรฉtodo de la jerarquรญa de herencia.

Razones importantes para utilizar la clase abstracta

  • Las clases abstractas ofrecen 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.

ยฟQuรฉ es una 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, sรญ se pueden crear instancias de clases que implementan interfaces. Las interfaces nunca contienen variables de instancia, pero pueden contener variables finales pรบblicas estรกticas (es decir, variables de clase constantes).

Diferencia entre interfaz y clase abstracta en Java

Una clase abstracta le permite crear funciones 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 Fรกcil de usar Clase abstracta
Speed (Rapidez) Lenta Rรกpido
Herencias Mรบltiples Implementar varias interfaces Sรณlo una clase abstracta
Estructura Mรฉtodos abstractos Mรฉtodos abstractos y concretos.
Cuรกndo usarlos 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 Al agregar cosas nuevas a la interfaz, es una pesadilla encontrar todos los implementadores e implementar 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 supone un modificador pรบblico. La clase abstracta puede tener un modificador de acceso.
Cuรกndo usarlos Es mejor utilizar la interfaz cuando varias implementaciones comparten รบnicamente 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.
Valor predeterminado de herencia mรบltiple Una clase puede implementar numerosas interfaces. Una clase hereda sรณlo 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 predeterminado completo que debe anularse.
Uso de modificadores de acceso No puede utilizar modificadores de acceso para el mรฉtodo, 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 campos y constantes.
Herencia Una interfaz puede heredar varias 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 ni destructores. Una clase abstracta puede declarar constructores y destructores.
Lรญmite de extensiones Puede ampliar cualquier nรบmero de interfaces. Sรณlo puede extender 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 abstract es obligatoria para declarar un mรฉtodo como abstracto.
Tipo de clase Una interfaz sรณlo puede tener mรฉtodos abstractos pรบblicos. Una clase abstracta tiene mรฉtodos abstractos pรบblicos y protegidos.

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
}

Java Ejemplo de interfaz:

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 " + (b * b));
    }
}

Resumir este post con: