Diferencia entre interfaz y clase abstracta en Java y C #

Autor: Laura McKinney
Fecha De Creación: 1 Abril 2021
Fecha De Actualización: 11 Mayo 2024
Anonim
Interfaces y clases abstractas. Qué es un interface. Qué es una clase abstracta. Versión 7 de Java.
Video: Interfaces y clases abstractas. Qué es un interface. Qué es una clase abstracta. Versión 7 de Java.

Contenido


La clase Interface y Abstract contribuyen al "tipo incompleto" en OOP. A veces necesitamos una superclase para definir "qué hacer" pero, no "cómo hacer", es cómo la parte derivada implementará la clase derivada según su necesidad "interfaz"Proporcionar una solución a esto. A veces necesitamos una clase de superclase que defina alguna estructura generalizada que pueda implementarse mediante clases derivadas y alguna estructura específica que pueda ser utilizada por las clases derivadas, "clase abstracta"Proporciona una solución a esto. La diferencia fundamental entre la interfaz y la clase abstracta es que la interfaz está completamente incompleta y la clase abstracta está parcialmente incompleta.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónInterfazClase abstracta
BásicoCuando solo tiene conocimiento de los requisitos que no se refieren a su implementación, utiliza "Interfaz".Cuando conoces parcialmente las implementaciones, usas "clases abstractas".
MétodosLa interfaz solo contiene métodos abstractos.La clase abstracta contiene métodos abstractos, así como métodos concretos.
Modificador de acceso de métodosLos métodos de interfaz son siempre "públicos" y "abstractos", incluso si no declaramos. Por lo tanto, se puede decir como 100%, clase abstracta pura.No es obligatorio que el método en la clase abstracta sea público y abstracto. Puede tener métodos concretos también.
Modificador restringido para métodosNo se puede declarar un método de interfaz con los siguientes modificadores:
Público: privado y protegido
Resumen: final, estático, sincronizado, nativo, estricto fp.
No hay restricciones en los modificadores de la variable de clase abstracta.
Modificador de acceso de variablesEl modificador de acceso permitido para las variables de interfaz es público, estático y final, ya sea que lo declaremos o no.Las variables en la clase abstracta no necesitan ser públicas, estáticas, finales.
Modificadores restringidos para variablesLas variables de interfaz no pueden declararse como privadas, protegidas, transitorias, volátiles.No hay restricción en los modificadores de las variables de clase abstracta.
Inicialización de variables.Las variables de interfaz deben inicializarse en el momento de su declaración.No es obligatorio que las variables de clase abstractas se inicialicen en el momento de su declaración.
Instancia y bloques estáticosDentro de la interfaz, no puede declarar una instancia o bloque estático.La clase abstracta permite una instancia o bloque estático dentro de ella.
ConstructoresNo se puede declarar el constructor dentro de la interfaz.Puede declarar constructor dentro de una clase abstracta.


Definición de interfaz

Java no permite la herencia múltiple. Es decir, una sola clase no puede heredar más de una clase a la vez. La razón detrás de esto se puede explicar con un ejemplo. Supongamos que tenemos dos clases padre, A y B y una clase derivada C. La clase derivada C hereda las clases A y B.Ahora, ambos tienen la clase A y B con el método set (), entonces será una pregunta para la clase C qué método set () de la clase debería heredar. La solución a este problema es la "interfaz".

La interfaz es una clase abstracta pura. La palabra clave utilizada para crear una interfaz es "interfaz". Como todos los métodos dentro de la interfaz son completamente abstractos. La interfaz solo especifica lo que debe hacer una clase, pero no define cómo lo hace. Solo porque todos los métodos declarados dentro de la interfaz son abstractos, no se crea ninguna instancia para una interfaz. La forma general de "interfaz" en Java es:


especificador de acceso interfaz interface_name {return-type method-name1 (lista de parámetros); return-type method-name2 (lista de parámetros); escriba final-varname1 = value; escriba final-varname2 = value; // ... return-type method-nameN (parámetro-lista); escriba final-varnameN = value; }

El especificador de acceso se declara público porque las clases necesitan implementar la interfaz.

No tenemos el concepto de "Interfaz" en C ++. Pero, Java y C # definen la interfaz muy bien.

Interfaz en Java:

  • Las variables de una interfaz son por defecto siempre públicas, estáticas y finales.
  • Las variables deben inicializarse en el momento de su declaración.
  • Las variables nunca pueden declararse como privadas, protegidas, transitorias y volátiles.
  • Los métodos de una interfaz son siempre públicos y abstractos, mientras que nunca pueden declararse como privados, protegidos, finales, estáticos, sincronizados, nativos y estrictos.
  • No puede declarar ningún constructor dentro de la interfaz ya que el propósito principal del constructor es la inicialización de las variables de clase pero, en la interfaz, las variables se inicializan en el momento de su declaración.
  • La interfaz puede heredar otras interfaces, pero la clase que implementa dicha interfaz debe implementar los métodos de todas las interfaces heredadas.
  • Una clase puede heredar más de una interfaz a la vez y debe implementar todos los métodos de todas las interfaces heredadas.

La forma general de implementar una interfaz en Java:

class class_name implementa Interface_name {// class-body}

Para heredar una interfaz, una clase usa una palabra clave "implementa", y la clase implementa todo el método declarado por una interfaz heredada.

Interfaz en C #:

La interfaz en C # es casi similar a la interfaz en Java, excepto:

  • La interfaz en C # no declara variables.
  • El nombre de la interfaz tiene el prefijo I mayúscula y se hereda con un signo de dos puntos (:).

La forma general de implementar una interfaz en C #:

class class_name: interface_name {// class-body}

Definición de clase abstracta

Una clase que contiene uno o más métodos abstractos se llama clase abstracta, y una clase se declara como abstracta utilizando la palabra clave "resumen", precedida por la palabra clave "clase" al comienzo de la declaración de clase. Como la clase abstracta contiene el método abstracto, constituye un tipo incompleto. Por lo tanto, no puede crear objetos de una clase abstracta. Cada vez que una clase hereda una clase abstracta, debe implementar todos los métodos abstractos de la clase abstracta si no es así, también debe declararse como abstracta. El atributo abstracto se hereda hasta que se logre la implementación completa de los métodos abstractos.

La clase abstracta también puede contener métodos concretos que la clase derivada puede utilizar tal como están. Pero no puede declarar un constructor abstracto o un método estático abstracto dentro de una clase abstracta. La forma general de la clase abstracta en Java es la siguiente:

abstract class class_name {abstract method_name1 (); nombre_método abstracto2 (); : return_type method_name3 (parámetro_lista) {// método concreto} return_type method_name4 (parámetro_lista) {// método concreto}};

El concepto de una clase abstracta es similar tanto en Java como en C #. Una clase abstracta es ligeramente diferente en C ++.

En C ++ si una clase tiene al menos una función virtual, la clase se convierte en una clase abstracta. En lugar de la palabra clave "resumen", la palabra clave "virtual" se utiliza para declarar un método abstracto.

  1. Cuando tenga el conocimiento de "lo que se requiere" pero no de "cómo se implementaría", se debe utilizar la interfaz. Por otro lado, si sabe lo que se requiere y sabe parcialmente cómo se implementaría, utilice una clase abstracta.
  2. Una interfaz tiene todos sus métodos abstractos, pero una clase abstracta tiene algunos métodos abstractos y algunos métodos concretos.
  3. Los métodos dentro de una interfaz son públicos y abstractos, por lo tanto, también se llama como una clase abstracta pura. Por otro lado, los métodos dentro de un resumen no están restringidos a ser públicos y solo abstractos.
  4. Un método de interfaz nunca puede ser privado, protegido, final, estático, sincronizado, nativo o estricto. Por otro lado, no hay restricciones a los métodos de una clase abstracta.
  5. Las variables en una interfaz son públicas y finales, ya sea que las declaremos o no, mientras que no existe tal restricción para que las variables de una clase abstracta sean públicas y finales solamente.
  6. Las variables en una interfaz nunca pueden ser privadas protegidas transitorias o volátiles, mientras que no hay restricción a las variables en una clase abstracta.
  7. La variable de una interfaz debe inicializarse durante la declaración. Por otro lado, las variables en una clase abstracta se pueden inicializar en cualquier momento.
  8. Dentro de una interfaz, no se puede declarar una instancia o un bloque estático, pero puede declarar una instancia o un bloque estático dentro de una clase abstracta.
  9. No puede definir el constructor dentro de una interfaz, mientras que puede definir el constructor dentro de una clase abstracta.

Conclusión:

Cuando necesite crear una clase base que contenga una forma generalizada de métodos que las clases derivadas puedan implementar de acuerdo con sus necesidades, el concepto de interfaz y clase abstracta ayuda a hacerlo.