Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Clase abstracta vs. Interfaz en Java: Explicación con Ejemplos

clases-abstractas-vs-interfaz-en-java
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Las clases e interfaces abstractas se utilizan para la abstracción en Java. La abstracción en la programación orientada a objetos se refiere a ocultar los detalles de implementación a los usuarios finales.

En abstracción, puede saber cuáles son las funcionalidades, pero no puede saber cómo se implementaron.

Veamos cada uno de ellos y tratemos de entender por qué se usan.

Abstract Class

Una clase que no se puede instanciar como un objeto y que puede tener o no métodos abstractos se denomina clase abstracta en Java. Un método abstracto es un método que no tiene un cuerpo de implementación cuando se declara.

ejemplo de clase abstracta
Ejemplo de una clase abstracta GraphicObject – Oracle

Puede crear una clase abstracta especificando el abstract palabra clave antes de la class palabra clave.

abstract class abstractClass {
    void run() {
        System.out.println("ran");
    }
}

Una clase abstracta puede ser extendida por otras clases. En otras palabras, también se puede subclasificar.

abstract class AbstractClass {
    void run() {
        System.out.println("ran");
    }
}

class ExtendingAbstractClass extends AbstractClass {
    void newMethod() {
        System.out.println("new");
    }

    @Override
    void run() {
        System.out.println("override");
    }
}

Las clases abstractas se utilizan para implementar métodos comunes entre varias clases que amplían una clase abstracta determinada. Además, la capacidad de definir métodos abstractos dentro de clases abstractas los hace increíblemente útiles para las clases que tienen métodos similares pero con diferentes implementaciones. Tomemos un ejemplo.

Considere un automóvil que tiene algunas funcionalidades, como arranque, parada, marcha atrás, etc. Estas funcionalidades son comunes entre todos los tipos de automóviles.

Pero, ¿qué pasa con las funcionalidades de automatización como la conducción autónoma? La implementación de esas funcionalidades puede diferir para diferentes tipos de automóviles. Veamos cómo puede crear un programa orientado a objetos relacionado con él.

En primer lugar, cree un Car clase que se ampliará con múltiples clases de diferentes tipos de automóviles.

abstract class Car {
    void start() {
        // implementation
        System.out.println("runs car");
    }

    void stop() {
        // implementation
        System.out.println("engine stops");
    }

    void reverse() {
        // implementation
        System.out.println("reverse mode enabled");
    }

    abstract void selfDrive();
}

El método start(), stop() y reverse() son métodos que son comunes en todos los coches. Por lo tanto, su implementación ya está definida dentro de la propia clase Car. Sin embargo, un determinado tipo de automóvil puede tener diferentes implementaciones del modo de conducción autónoma. Y así, se puede definir selfDrive() como un método abstracto e implementarlo de diferentes maneras en diferentes clases de diferentes tipos de autos.

class CarTypeA extends Car {
    @Override
    void start() {
        super.start();
    }

    @Override
    void stop() {
        super.stop();
    }

    @Override
    void reverse() {
        super.reverse();
    }

    void selfDrive() {
        // custom implementation
        System.out.println("Type A self driving mode enabled");
    }
}
class CarTypeB extends Car {
    // ...all similar methods

    void selfDrive() {
        // custom implementation
        // different implementation than CarTypeB
        System.out.println("Type B self driving mode enabled");
    }
}

Es importante tener en cuenta que, si una subclase no implementa todos los métodos abstractos definidos en la clase abstracta, entonces debe declararse como una clase abstracta.

Interface

Una interfaz es una forma de decirle a una clase qué métodos debe implementar. Por ejemplo, si considera el ejemplo de un automóvil, tiene algunas funciones básicas. Puede arrancar, moverse y detenerse. Estas funciones son comunes en todos los coches.

Entonces, si implementa una interfaz de un automóvil en una clase, debe implementar todos los métodos para que el automóvil funcione de manera adecuada y segura.

Al igual que las clases abstractas, no podemos instanciar o crear objetos de una interfaz. Puede considerarse una clase completamente abstracta porque contiene solo métodos abstractos, es decir, métodos sin un cuerpo de implementación.

Puede crear una interfaz utilizando el interface palabra clave.

interface CAR {
    void start();
    void stop();
    void move();
}

Implementar una interfaz usando el implements palabra clave al definir una clase.

class CarTypeB implements CAR {
    public void start() {
        System.out.println("started");
    }

    public void stop() {
        System.out.println("stopped");
    }

    public void move() {
        System.out.println("running");
    }
}

Similarity

Ninguna instanciación como objeto es lo único que tienen en común las clases abstractas y las interfaces.

Differences

Clase abstractaInterfaz
Herencia e ImplementaciónUna clase solo puede heredar una clase abstracta.Una clase puede implementar múltiples interfaces.
Tipos de variablesPuede tener variables finales, no finales, estáticas y no estáticas.Solo puede tener variables estáticas y finales.
Tipos de métodosPuede contener tanto métodos abstractos como no abstractos.Solo puede contener métodos abstractos, pero los métodos estáticos son una excepción.
Modificadores de accesoUna clase abstracta puede tener un modificador de acceso.Las firmas de métodos definidas en la interfaz son públicas de forma predeterminada. Una interfaz no tiene un modificador de acceso.
Constructores y DestructoresPuede declarar constructores y destructores.No puede declarar constructores o destructores.
VelocidadRápidoLenta
Diferencias entre clase abstracta e interfaz

When to use abstract class and interface?

Use clases abstractas cuando:

  • Desea compartir algunos métodos y campos comunes entre varias clases.
  • Declarando non-static y non-final campos para modificar el estado del objeto al que están vinculados.

Puede utilizar interfaces cuando:

  • Desea definir el comportamiento de una clase que implementa la interfaz, pero no le importa la forma en que se implementa.
  • Desea asegurarse de que una clase implemente todos los métodos para funcionar correctamente.

Palabras finales

Las interfaces se utilizan principalmente para crear API porque pueden proporcionar una estructura para implementar la funcionalidad sin preocuparse por la implementación real.

Las clases abstractas se utilizan generalmente para compartir métodos abstractos y no abstractos comunes entre varias clases, lo que amplía la clase abstracta para que el código sea más reutilizable.

Aprenda más sobre Java con la ayuda de estos cursos en linea para java. ¿Te estás preparando para una entrevista en Java? Aquí están algunas preguntas de la entrevista sobre Programación Orientada a Objetos.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder