Què és la interfície a Java i com implementar-la?



Aquest article us ajudarà amb un enfocament complet cap a la interfície Java i els diversos tipus d’exemples relacionats amb la seva funcionalitat.

' Interfície és un nivell avançat d’abstracció en el llenguatge de programació Java. La interfície Java ajuda a reducció de la complexitat al codi i simplifica el fitxer llegibilitat . En aquest article, us explicaré la interfície Java mitjançant el següent expedient.

Què és una interfície Java?

Interfície d'ordinador es coneix com a límit que separa dos o més sistemes. Intercanvia dades entre els components d’un sistema que pot fer senyals, ordres o protocols.





què és l'etiqueta br en html

java-interface

Java Abstraction proporciona la funcionalitat d'un mètode concret ocultant la lògica d'implementació escrita dins del mètode. De la mateixa manera, la interfície Java també és una classe abstracta que inclou la declaració del mètode, però no la seva definició. Una classe eines una interfície per heretar els mètodes abstractes. Juntament amb els mètodes abstractes, un interfície també pot incloure constants, mètodes estàtics, interfícies imbricades i mètodes predeterminats.



Semblances entre una classe i una interfície.

Una interfície és completament similar a una classe normal de Java. Una interfície inclou els mètodes abstractes i aquests mètodes estan dissenyats per implementar-se. Aquest procés és simplement igual a l’herència, cosa normal quan es tracta de classes. En parlarem més sobre les similituds.

  • Igual que una classe, una interfície també pot contenir tants mètodes com sigui necessari.
  • De manera similar a les classes, la interfície també s’escriu amb un .java fitxer d’extensió.
  • Sorprenentment, el bytecode per a una interfície haurà aparegut en un fitxer .classe dossier.
  • Es mostra una interfície en forma de paquet i el seu codi byt respectiu es troba en un directori que coincideix amb el nom del paquet.

Per què necessitem una interfície?

Java no admet Múltiples herències, degut a això, no permetrà que les classes s'estenguin més d'una classe en una instància. Classes infantils no ha pogut heretar les propietats de diverses classes pares en una única instància, ja que resulta Problema del diamant. Per superar aquest problema, Interfície s’introdueix. Entenguem aquest problema a través d’un exemple.



Suposem que tenim dos plans, un només pot portar passatgers, només l’altra càrrec. Ara ho necessitem heretar les propietats de l'avió de càrrega i l'avió de passatgers. Java no donaria suport a aquesta solució, ja que acaba en ambigüitat entre els dos plans.

Però, si ho podeu fer fent que Java senti que està heretant un pla i implementació els mètodes presents a l’altre pla. És com un avió comercial que porta tant passatgers com equipatges de càrrega. La interfície és com fer un pla més gran que pugui fer les dues tasques sense interferir amb els components de l’altre, en lloc d’acceptar els mètodes de la Classe d'interfície.

// Codi de classe A.

paquet de classe A múltiple {void msg () {System.out.println ('Hello')}}

// Codi de classe B.

paquet de classe B múltiple {void msg () {System.out.println ('Welcome')}}

Codi de classe C.

paquet múltiple de classe C s'estén A, B {// Això no serà acceptat per Java, generarà un error i el codi no s'executarà. public static void main (String args []) {C obj = new C () obj.msg ()}}

Sortida:

Error. Aquest enfocament en particular genera una excepció. Java no admet múltiples herències. Aquest error es coneix com Problema del diamant 

Provem una solució mitjançant una interfície, Classes infantils pot accedir als mètodes des de Parent múltiple classes en una única instància.

// Codi d’interfície

paquet MIS solució d'interfície pública {public void Hola () public void Benvingut ()}

// Codi de classe

package MIS classe pública classA implementa la solució {public void Hola () {java.lang.System.out.println ('Hola món')} public void Benvinguda () {java.lang.System.out.println ('Benvingut a Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Sortida:

Hola món
Benvingut a Edureka

Declaració d'una interfície Java: sintaxi

interfície nom_interfície {// declarar camps constants // declarar mètodes () // mètodes per defecte}

Passem a un exemple sobre la interfície Java

Exemple d'interfície Java

Anem a crear una calculadora senzilla basada en la interfície Java.

// Codi d’interfície

paquet operacions bàsiques interfície pública matemàtiques {public void add () public void sub () public void mul () public void div ()}

// Codi de classe

paquet basicoperations import java.util.Scanner public class student1 implements maths {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Introduïu dos valors sencers per realitzar l'addició') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('La suma de' + a + 'i' + b + 'és' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Introduïu dos valors sencers per realitzar la substracció') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('La diferència de' + a + 'i' + b + 'és' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter multiplicació de dos valors enters ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Producte de '+ a +' i '+ b +' és '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Introduïu qualsevol divisió de dos valors enters') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Quocient de' + a + 'i' + b + 'és' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Sortida:

dades del quadre que combinen unió esquerra

Avançant més, aprendrem a niar una interfície Java.

Anidació de la interfície Java

Nesting d’interfícies és un procés de declaració d'una interfície dins d'una altra Interfície existent o declarant una interfície dins d'un fitxer Classe. La interfície imbricada també es coneix com a Interfície interior.

No es pot accedir a la interfície imbricada directament . Per tant, Nesting s’implementa per resoldre els espais de noms agrupant-los amb els seus relacionats Interfícies i Classes. Per aquest procediment,podem trucar al Interfície imbricada a través de Classe exterior o bé Interfície exterior nom seguit d'un punt (.) , i Nom de la interfície.

Provem alguns exemples basats en Nesting d’interfícies. En primer lloc, intentem niar un Interfície Java dins d’un altre Interfície Java com es mostra a continuació:

// Codi d’interfície

package interfície pública Nest OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

// Codi de classe

package Classe Nest NestedInterfaceDemo implementa OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('First' + n + 'terms:') for (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nImpressió des del mètode NinterInterface interfície ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Sortida:

Els primers 10 termes: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Impressió des del mètode NinterInterface ...

Ara, intentem niar un Interfície Java dins d'un Classe Java.

// Codi d’interfície

paquet Nest2 classe pública EdurekaClass {interfície EdurekaInterface {void NestedMethod ()}}

// Codi de classe

paquet classe Nest2 NestedInterfaceDemo2 implementa EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] for (int i = 0 i .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 ()}}

Sortida:

akerudE

Tot i que una interfície sembla gairebé similar a una classe, hi ha algunes diferències entre elles. Anem a discutir-ne les diferències.

Diferència entre la classe Java i la interfície Java

INTERFÀCIA CLASSE
Admet herències múltiples No admet l'herència múltiple
No té membres de dades Inclou Membres de dades
No té constructors Inclou constructors
Inclou membres incomplets (membre signatura) Inclou membres complets (abstractes) i incomplets
No té modificadors d'accés Inclou modificadors d’accés
La interfície no té membres estàtics La classe té tots els seus membres com a estàtica

Avantatges i desavantatges de la interfície Java

Avantatges:

  • Suporta la interfície Java Herència múltiple.
  • La interfície Java permet als programadors trencar els complexos enfocaments de programació i simplificar el programa dependències entre els objectes.
  • La interfície de Java fabrica membres de dades i mètodes en una aplicació que es vagi acoblant.

Desavantatges:

  • L'ús de la interfície Java fa caure el fitxer velocitat d'execució de l'aplicació.
  • Les interfícies Java de l’aplicació s’utilitzen repetidament en gran mesura o gairebé no s’utilitzen.

Punts clau de la interfície Java

  • Cap dels mètodes declarats a la interfície té un cos que la faci proporcionar una abstracció completa.
  • No és possible crear un objecte d'una interfície. Per tant, la instanciació d’una interfície no és possible.
  • Una classe pot implementar una interfície mitjançant la paraula clau implements. Vegem-ho a través d’un exemple.

// Codi d’interfície

paquet extInterface interfície pública extInterface {public void method1 () public void method2 ()}

// Codi de classe

paquet extInterface import java.util.Scanner classe Edureka implementa extInterface {public void method1 () {System.out.println ('implementació del mètode1') Scanner scanner = nou Scanner (System.in) System.out.println ('Introduïu el número per trobar arrel quadrada a Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (quadrat) System.out.printf (' Arrel quadrada del número:% f és:% f% n ', quadrat, squareRoot)} public void method2 () {System.out.println ('implementació del mètode2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Sortida:

implementació del mètode 1 Introduïu el número per trobar l'arrel quadrada a Java: 16 L'arrel quadrada del número: 16.0 és: 4.0
  • Una classe pot implementar múltiples herències en una única instància. Entenguem-ho a través del següent codi.

// Codi de la interfície 1

com convertir un doble a un int java
package ExtendInt interface pública Interface1 {public void armstrong ()}

// Codi de la interfície 2

package 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 ('Número no armstrong') System.out.println ('Extensió a la interfície 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // entrada m = n / 2 si (n == 0 || n == 1) {System.out.println (n + 'no és el número primer')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'no és el número primer') indicador = 1 interrupció}} si (indicador == 0) {System.out.println (n + 'és el número primer')}} System.out.println ('Extensió a Interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Sortida:

3 és el nombre primer que s'estén a la interfície 2
  • La interfície Java requereix que les variables declarades s’inicialitzin en el moment de la declaració.
  • Els modificadors d'accés per a una interfície s'estableixen de manera predeterminada a estàtic públic i final. Entenem-ho amb un exemple

// Codi d’interfície

paquet prova interfície pública Prova {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Totes les declaracions anteriors són certes i vàlides dins d'una interfície.
  • La interfície Java és capaç d’ampliar qualsevol nombre d’interfícies, però mai no en pot implementar cap.
  • Una classe Java pot implementar qualsevol nombre d'interfícies.
  • Java Class no pot implementar interfícies amb el mateix nom de mètode i un tipus de retorn diferent.
  • Si hi ha dos o més mètodes amb el mateix nom de mètode, existeixen en diverses interfícies, és suficient implementar el mètode per una vegada. Entenguem això amb un exemple pràctic.

// Codi d’interfície

empaquetar la mateixa interfície pública A {public void display ()} // Codi d’interfície empaquetar la mateixa interfície pública B {public void display ()} // Class Code empaquetar la mateixa classe implementa A, B {public void display () {System.out .println ('mostrant dades')} public static void main (String [] args) {same print = new same () print.display ()}}

Sortida:

Benvingut a Edureka E-Learning

Amb això, arribem al final d’aquest article. Espero que hagueu entès la importància de la interfície, la sintaxi, la funcionalitat, la imbricació de la interfície, els punts clau de la interfície Java i les operacions realitzades amb ells.

Ara que ja heu entès els conceptes bàsics de Java, consulteu el fitxer per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació i certificació de Java J2EE i SOA d’Edureka està dissenyat per a estudiants i professionals que vulguin ser desenvolupador de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per a conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate i Primavera .

Tens alguna pregunta? Esmenteu-lo a la secció de comentaris d’aquest bloc “Interfície Java” i us respondrem el més aviat possible.