¿Qué es la interfaz en Java y cómo implementarla?



Este artículo lo ayudará con un enfoque integral de la interfaz Java y los diversos tipos de ejemplos relacionados con su funcionalidad.

' Interfaz es un nivel avanzado para lograr la abstracción en el lenguaje de programación Java. La interfaz Java ayuda en el reducción de complejidad en el código y simplifica la legibilidad . En este artículo, te explicaré la interfaz de Java a través del siguiente expediente.

¿Qué es una interfaz Java?

Interfaz de computadora se conoce como un límite que separa dos o más sistemas. Intercambia datos entre los componentes de un sistema que pueden ser señales, comandos o protocolos.





java-interface

Java Abstraction proporciona la funcionalidad de un método en particular al ocultar la lógica de implementación escrita dentro del método. Del mismo modo, la interfaz de Java también es una clase abstracta que incluye la declaración de método pero no su definición. Una clase implementos una interfaz para heredar los métodos abstractos. Junto con los métodos abstractos, un interfaz también puede incluir constantes, métodos estáticos, interfaces anidadas y métodos predeterminados.



Similitudes entre una clase y una interfaz.

Una interfaz es completamente similar a una clase normal en Java. Una interfaz incluye los métodos abstractos y estos métodos están diseñados para ser implementados. Este proceso es simplemente igual a la herencia, lo cual es normal cuando se trata de clases. Discutiremos más sobre similitudes.

¿Puedes extender e implementar en java?
  • Al igual que una clase, una interfaz también puede contener tantos métodos como sea necesario.
  • Similar a las clases, la interfaz también está escrita con un .Java archivo de extensión.
  • Sorprendentemente, el código de bytes de una interfaz habrá aparecido en un .clase archivo.
  • Una interfaz se muestra en forma de paquete y su código de bytes respectivo está en un directorio que coincide con el nombre del paquete.

¿Por qué necesitamos una interfaz?

Java no es compatible Herencias múltiples, debido a lo cual, no permitirá que las clases se extiendan más de una clase en una instancia. Clases para niños no pudo heredar las propiedades de múltiples clases de padres en una sola instancia, ya que da como resultado Problema del diamante. Para superar este problema, Interfaz es presentado. Entendamos este problema con un ejemplo.



Supongamos que tenemos dos aviones, uno solo puede llevar pasajeros el otro solo cargo. Ahora, necesitamos heredar las propiedades tanto del avión de carga como del avión de pasajeros. Java no admitiría esta solución, ya que termina en ambigüedad entre los dos planos.

Pero, si puede hacerlo posible haciendo que Java sienta que está heredando un plano y implementar los métodos presentes en el otro plano. Es como un avión comercial que lleva tanto pasajeros como equipaje de carga. La interfaz es como hacer un plano más grande que podría realizar ambas tareas sin interferir con los componentes del otro, en lugar de tomar prestados los métodos del Clase de interfaz.

// Código clase A

paquete de clase múltiple A {void msg () {System.out.println ('Hola')}}

// Código clase B

paquete de clase múltiple B {void msg () {System.out.println ('Bienvenido')}}

Código Clase C

paquete múltiple clase C extiende A, B {// Esto no será aceptado por Java, arrojará un error y el código no se ejecutará. public static void main (String args []) {C obj = new C () obj.msg ()}}

Salida:

Error. Este enfoque particular arroja una excepción. Java no admite herencias múltiples. Este error se conoce como Problema del diamante 

Probemos una solución usando una interfaz, Clases para niños puede acceder a los métodos desde Padre múltiple clases en una sola instancia.

// Código de interfaz

paquete de solución de interfaz pública MIS {public void Hello () public void Welcome ()}

//Código de clase

paquete MIS public class classA implementa la solución {public void Hola () {java.lang.System.out.println ('Hola mundo')} public void Welcome () {java.lang.System.out.println ('Bienvenido a Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Salida:

Hola Mundo
Bienvenidos a Edureka

Declaración de una interfaz Java: sintaxis

interface interface_name {// declarar campos constantes // declarar métodos () // métodos predeterminados}

Veamos un ejemplo sobre la interfaz Java

Ejemplo de interfaz Java

Creemos una calculadora simple basada en la interfaz Java.

// Código de interfaz

paquete operaciones básicas interfaz pública matemáticas {public void add () public void sub () public void mul () public void div ()}

//Código de clase

package basicoperations import java.util.Scanner public class student1 implementa matemáticas {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Ingrese dos valores enteros cualesquiera para realizar la suma') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Suma de' + a + 'y' + b + 'es' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Ingrese dos valores enteros cualesquiera para realizar la resta') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('La diferencia de' + a + 'y' + b + 'es' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter cualquier multiplicación de dos valores enteros ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Producto de '+ a +' y '+ b +' es '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Ingrese cualquier división de dos valores enteros') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Cociente de' + a + 'y' + b + 'es' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Salida:

Avanzando más, aprenderemos a anidar una interfaz Java.

Anidar la interfaz de Java

Anidamiento de interfaz es un proceso de declarar una interfaz dentro de otra Interfaz existente o declarando una interfaz dentro de un Clase. La interfaz anidada también se conoce como Interfaz interior.

No se puede acceder a la interfaz anidada directamente . Por lo tanto, el anidamiento se implementa para resolver los espacios de nombres agrupándolos con sus Interfaces y Clases. Por este procedimiento,podemos llamar al Interfaz anidada a través de Clase externa o Interfaz externa nombre seguido de un punto (.) y Nombre de la interfaz.

Probemos algunos ejemplos basados ​​en Anidamiento de interfaces. Primero, intentemos anidar un Interfaz Java dentro de otro Interfaz Java Como se muestra abajo:

// Código de interfaz

paquete Nest public interface OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

//Código de clase

package Nest class NestedInterfaceDemo implementa OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('Primeros' + n + 'términos:') para (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nPrinting desde el método Nested InnerInterface ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Salida:

Primeros 10 términos: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Impresión desde el método Nested InnerInterface ...!

Ahora, intentemos anidar un Interfaz Java dentro de una Clase Java.

// Código de interfaz

paquete Nest2 clase pública EdurekaClass {interfaz EdurekaInterface {void NestedMethod ()}}

//Código de clase

paquete Nest2 class NestedInterfaceDemo2 implementa EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length =Astry i & ltr .length i ++) result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (new String (result))} public static void main (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

Salida:

akerudE

Aunque una interfaz se parece casi a una clase, existen algunas diferencias entre ellas. Analicemos sus diferencias.

Diferencia entre la clase Java y la interfaz Java

INTERFAZ CLASE
Admite herencia múltiple No admite herencia múltiple
No tiene miembros de datos Incluye miembros de datos
No tiene constructores Incluye constructores
Incluye miembros incompletos (miembro de firma) Incluye miembros completos (abstractos) e incompletos
No tiene modificadores de acceso Incluye modificadores de acceso
La interfaz no tiene miembros estáticos La clase tiene todos sus miembros como estáticos

Ventajas y desventajas de la interfaz Java

Ventajas:

  • Soportes de interfaz Java Herencia múltiple.
  • La interfaz de Java permite a los programadores romper los enfoques de programación complejos y simplificar la dependencias entre los objetos.
  • La interfaz Java hace que miembros de datos y métodos en una aplicación para acoplarse libremente.

Desventajas:

  • El uso de la interfaz de Java reduce la velocidad de ejecución de la aplicación.
  • Las interfaces Java en la aplicación se utilizan repetidamente en gran medida o apenas se utilizan.

Puntos clave sobre la interfaz Java

  • Ninguno de los métodos declarados en la interfaz tiene un cuerpo que lo haga proporcionar una abstracción completa.
  • No es posible crear un objeto de una interfaz. Por lo tanto, la creación de instancias de una interfaz no es posible.
  • Una clase puede implementar una interfaz utilizando la palabra clave implements. Veamos esto con un ejemplo.

// Código de interfaz

paquete extInterface public interface extInterface {public void method1 () public void method2 ()}

//Código de clase

paquete extInterface import java.util.Scanner class Edureka implementa extInterface {public void method1 () {System.out.println ('implementación del método1') Scanner scanner = new Scanner (System.in) System.out.println ('Ingrese el número para encontrar la raíz cuadrada en Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Raíz cuadrada del número:% f es:% f% n ', cuadrado, squareRoot)} public void method2 () {System.out.println ('implementación del método2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Salida:

implementación del método1 Ingrese el número para encontrar la raíz cuadrada en Java: 16 La raíz cuadrada del número: 16.0 es: 4.0
  • Una clase puede implementar varias herencias en una sola instancia. Entendamos a través del siguiente código.

// Código de interfaz 1

paquete ExtendInt interfaz pública Interface1 {public void armstrong ()}

// Código de interfaz 2

paquete ExtendInt public interface Interface2 {public void prime ()} // Class Code package ExtendInt public class Edureka2 implementa Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n while (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('número armstrong') else System.out.println ('No es un número Armstrong') System.out.println ('Extendiéndose a la Interfaz 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // ingrese m = n / 2 si (n == 0 || n == 1) {System.out.println (n + 'no es un número primo')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'no es número primo') flag = 1 break}} if (flag == 0) {System.out.println (n + 'es número primo')}} System.out.println ('Extending a la interfaz 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Salida:

3 es el número primo que se extiende a la interfaz 2 número armstrong que se extiende a la interfaz 1
  • La interfaz Java requiere que las variables declaradas se inicialicen en el momento de la declaración.
  • Los modificadores de acceso para una interfaz se establecen en público estático y final de forma predeterminada. Entendamos esto con un ejemplo

// Código de interfaz

prueba de paquete interfaz pública Try {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Todas las declaraciones anteriores son verdaderas y válidas dentro de una interfaz.
  • La interfaz Java es capaz de ampliar cualquier número de interfaces, pero nunca puede implementar una.
  • Una clase Java puede implementar cualquier número de interfaces.
  • La clase Java no puede implementar interfaces con el mismo nombre de método y diferente tipo de retorno.
  • Si hay dos o más métodos con el mismo nombre de método, existen en múltiples interfaces, entonces implementar el método por una vez es suficiente. Entendamos esto con un ejemplo práctico.

// Código de interfaz

paquete misma interfaz pública A {public void display ()} // código de interfaz paquete misma interfaz pública B {public void display ()} // código de clase paquete misma clase misma implementa A, B {public void display () {System.out .println ('mostrando datos')} public static void main (String [] args) {same print = new same () print.display ()}}

Salida:

Bienvenido a Edureka E-Learning

Con esto llegamos al final de este artículo. Espero que haya entendido la importancia de la interfaz, la sintaxis, la funcionalidad, el anidamiento de la interfaz, los puntos clave de la interfaz Java y las operaciones que se realizan con ellos.

que es un navegador sqlite

Ahora que ha entendido los conceptos básicos de Java, consulte 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. El curso de certificación y capacitación Java J2EE y SOA de Edureka está diseñado para estudiantes y profesionales que desean ser desarrolladores de Java. El curso está diseñado para darle una ventaja inicial en la programación de Java y capacitarlo para los conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Primavera .

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog de 'Interfaz Java' y nos pondremos en contacto con usted lo antes posible.