¿Cuál es la diferencia entre la clase abstracta y la interfaz en Java?



Este artículo lo ayudará a comprender la diferencia clave entre la clase abstracta y la interfaz en Java con la ayuda de un programa de ejemplo.

Las clases e interfaces abstractas son los dos bloques de construcción principalesdel . Aunque ambos se utilizan principalmente para la abstracción, son muy diferentes entre sí y no se pueden utilizar indistintamente. En este artículo, averigüemos cuál es la diferencia entre la clase abstracta y la interfaz en Java.

Los temas que se tratan en este artículo son los siguientes:





arreglos de clasificación de c ++

Para comprender las diferencias entre la clase abstracta y la interfaz en , necesita saber qué es una clase abstracta y qué es una interfaz. Entonces, comencemos discutiendo cuáles son.

¿Qué es la clase abstracta en Java?

En cualquier lenguaje de programación, abstracción significa ocultar al usuario los detalles irrelevantes para centrarse solo en los detalles esenciales para aumentar la eficiencia y reducir así la complejidad. En Java, la abstracción se logra usando clases abstractas . Una clase abstracta captura características comunes de subclases y puede contener o no cualquier método abstracto. No se puede instanciar, pero solo sus subclases pueden usarlo como una superclase. Aquí hay un programa de ejemplo que demuestra la clase abstracta:



Nota: Un método abstracto , es un método que no está implementado y agregaincompletitud para clase .

package MyPackage // clase abstracta clase abstracta Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // declara métodos no abstractos // tiene implementación predeterminada public void BasicInfo (String details) {System. out.println (this.AnimalName + '' + detalles)} // métodos abstractos que serán // implementados por su (s) subclase (s) abstract public void habitat () abstract public void respiration ()} class Terrestrial extensions Animal {// constructor Terrestrial (String name) {super (name)} @Override public void habitat () {System.out.println ('dejar en tierra y')} @Override public void respiration () {System.out.println ('respire a través de los pulmones o la tráquea. ')}} class Acuático extiende Animal {// constructor Acuático (Nombre de cadena) {super (nombre)} @Override public void habitat () {System.out.println (' Sale en el agua y ') } @Override public void respiration () {System.out.println ('respirar a través de branquias o su piel.')}} Class AbstractClassDemo {public static voi d main (String [] args) {// creando el Objeto de la clase Terrestre // y usando la referencia de la clase Animal. Animal object1 = new Terrestrial ('Humans') object1.BasicInfo ('son seres terrestres, ellos') object1.habitat () object1.respiration () System.out.println ('') // creando los Objetos de la clase circular Animal object2 = new Aquatic ('Peces') object2.BasicInfo ('son seres acuáticos, ellos') object2.habitat () object2.respiration ()}}

Salida

Los humanos son seres terrestres, salen a tierra y respiran por los pulmones o la tráquea. Los peces son seres acuaticos, salen en el agua y respiran por las branquias o por su piel.

los Información básica () es un método compartido por Terrestre y Acuático clases. Ya que Clase animal no se puede iniciar, estamos creando los objetos de Terrestre y Acuático clases con fines de programación. A continuación, tenemos interfaces.



Interfaz en Java

Otra forma de lograr abstracción en Java es usando interfaces .Una interfaz es una colección de métodos abstractos, no tiene ningún contenido concreto. , a diferencia de una clase abstracta. Pero a diferencia de la clase abstracta, una interfaz proporciona una abstracción completa en Java. Puede tener métodos y variables como una clase. Sin embargo, los métodos declarados en una interfaz son abstractos por defecto.Aquí hay un demostrando clase abstracta:

package MyPackage interface Animals {// métodos abstractos void habitat () void respiration ()} class TerrestrialA implementa Animals {String AnimalName = '' // constructor TerrestrialA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'dejar en tierra y')} @Override public void respiration () {System.out.println ('respirar a través de pulmones o tráquea.')}} Clase AquaticA implementa Animales {String AnimalName = '' // constructor AquaticA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'dejar en el agua y')} @Override public void habitat () {System.out.println ('respirar a través de las branquias o su piel.')}} Class JavaInterfaceDemo {public static void main (String [] args) {// creando el Objeto de la clase Terrestre // y usando la referencia de clase Animal . Animales object1 = new TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // creando los Objetos de la clase circular Animals object2 = new AquaticA ('Fish') object2.habitat () objeto2.respiración ()}}

Salida

Los seres humanos salen a tierra y respiran a través de los pulmones o la tráquea. Los peces salen en el agua y respiran por las branquias o la piel.

Si no tiene ningún código común entre sus clases , luego puede ir a la interfaz. Una interfaz es más como un plano de una clase, ya que no tiene métodos no abstractos.

A partir del contenido anterior, es posible que haya notado la diferencia clave entre la clase abstracta y la interfaz en . Es decir, a diferencia de la clase abstracta, una interfaz proporciona abstracción en Java. Ahora sigamos adelante y enumeremos otras diferencias.

Clase abstracta vs interfaz

La siguiente tabla enumera las diferencias clave entre la clase abstracta y la interfaz.

Parámetro Clase abstracta Interfaz

Implementación del método predeterminado

Puede tener implementación de método predeterminado

Las interfaces proporcionan abstracción pura y no pueden tener implementación en absoluto

Variables

Puede contener variables no finales.

Las variables declaradas en una interfaz son por defecto finales

Palabra clave utilizada

Una clase abstracta se puede ampliar con la palabra clave 'extiende

La interfaz debe implementarse utilizando complementos de palabras clave

Modificadores de acceso

latatener modificador público, protegido, privado y predeterminado

Los métodos de interfaz son públicos por defecto. no puedes usar ningún otro modificador de acceso con él

Velocidad de implementación

Es más rápido que la interfaz.

Una interfaz es algo más lenta y requiere una dirección indirecta adicional

Clase normal

Puede extender solo una clase abstracta

Puede implementar múltiples interfaces

Constructores

Una clase abstracta puede tener constructores

Una interfaz no puede tener constructores

qué método de clase de escáner lee una cadena

Herencia múltiple

Una clase abstracta puede extender otra clase y puede implementar múltiples interfaces Java.

La interfaz solo puede extender otra interfaz Java

Bueno, ahora conoce las diferencias clave entre la clase abstracta y la interfaz en Java. Pero, ¿cómo decides cuándo usar cuál de estos dos?

¿Cuándo usar la clase abstracta y cuándo usar la interfaz?

Considere el uso de clases abstractas en los siguientes casos:

  • Si tiene algunas clases relacionadas que necesitan compartir el mismas líneas de código
  • Cuando quieras definir el campos no estáticos o no finales
  • Cuando haymétodos o camposo requiere modificadores de acceso que no sea público (como protegido y privado)

Considere el uso de interfaces en los siguientes casos:

  • Cuando quieras lograr pura abstracción
  • Si quieres emplear múltiple , es decir,implementar más de una interfaz
  • Cuando desea especificar el comportamiento de un tipo de datos en particular, pero no le preocupa quién implementa su comportamiento.

Esto nos lleva al final de este artículo. He cubierto una de las preguntas de Java más frecuentes en Interview, que es la diferencia entre la clase abstracta y la interfaz en Java.

Asegúrese de practicar tanto como sea posible y revertir su experiencia.

Revisar la por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. Estamos aquí para ayudarlo en cada paso de su viaje, para que, además de estas preguntas de la entrevista de Java, se convierta en un plan de estudios diseñado para estudiantes y profesionales que desean ser desarrolladores de Java.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de esta 'interfaz de Java Map' artículo y nos pondremos en contacto contigo lo antes posible.