Hvad er interface i Java, og hvordan implementeres det?



Denne artikel hjælper dig med en omfattende tilgang til Java Interface og de forskellige typer eksempler relateret til dets funktionalitet.

' Interface er et avanceret niveau for opnåelse af abstraktion på Java Programming Language. Java-interface hjælper med reduktion af kompleksitet i koden og forenkler læsbarhed . I denne artikel vil jeg forklare dig Java-interface gennem følgende docket.

Hvad er et Java-interface?

Computerinterface er kendt som en grænse, der adskiller to eller flere systemer. Det udveksler data mellem komponenterne i et system, der kan signalere, kommandoer eller protokoller.





java-interface

Java Abstraction giver funktionaliteten af ​​en bestemt metode ved at skjule implementeringslogikken, der er skrevet inde i metoden. Tilsvarende er Java-interface også en abstrakt klasse, der inkluderer metodedeklarationen, men ikke dens definition. En klasse redskaber et interface til at arve de abstrakte metoder. Sammen med abstrakte metoder, en interface kan også omfatte konstanter, statiske metoder, indlejrede grænseflader og standardmetoder.



ssis tutorial for begyndere 2012 med eksempler

Ligheder mellem en klasse og en grænseflade.

En grænseflade svarer fuldstændigt til en normal klasse i Java. En grænseflade inkluderer de abstrakte metoder, og disse metoder er designet til at blive implementeret. Denne proces er kun lig med arv, hvilket er normalt, når det kommer til klasser. Vi vil diskutere mere om ligheder.

  • Samme som en klasse, en grænseflade kan også indeholde så mange antal metoder som nødvendigt.
  • Svarende til klasser er grænsefladen også skrevet med en .java fil til udvidelse.
  • Overraskende nok vil bytekoden til en grænseflade have vist sig i en .klasse fil.
  • En grænseflade vises i form af en pakke, og deres respektive bytecode er i en mappe, der matcher pakkenavnet.

Hvorfor har vi brug for et interface?

Java understøtter ikke Flere arv, på grund af hvilket, Det tillader ikke klasser at udvide mere end en klasse ad gangen. Børneklasser kunne ikke arve egenskaberne af flere forældreklasser i en enkelt instans, som det resulterer i Diamantproblem. For at løse dette problem, Interface introduceres. Lad os forstå dette problem gennem et eksempel.



Lad os antage, at vi har to plan, den ene kan kun bære passagerer, kun den anden position. Nu skal vi arve egenskaberne for både lastflyet og passagerflyet. Java understøtter ikke denne løsning, da den ender i tvetydighed mellem de to fly.

Men hvis du kan gøre det muligt ved at få Java til at føle, at det arver et plan og implementerer metoderne til stede i det andet plan. Det er som et kommercielt fly, der tager både passagerer og fragtbagage. Interfacet er som at lave et større plan, som kunne udføre begge opgaver uden at forstyrre hinandens komponenter, i stedet for bare at låne metoderne fra Interface klasse.

// Klasse A-kode

pakke flere klasse A {void msg () {System.out.println ('Hej')}}

// Klasse B-kode

pakke flere klasse B {void msg () {System.out.println ('Welcome')}}

Klasse C-kode

pakke flere klasse C udvider A, B {// Dette accepteres ikke af Java, det kaster en fejl, og koden udføres ikke. public static void main (String args []) {C obj = new C () obj.msg ()}}

Produktion:

Fejl. Denne særlige tilgang kaster en undtagelse. Java understøtter ikke flere arv. Denne fejl kaldes Diamantproblem 

Lad os prøve en løsning ved hjælp af en grænseflade, Børneklasser kan få adgang til metoderne fra Flere forældre klasser i en enkelt instans.

// Interface kode

pakke MIS-løsning til offentlig grænseflade {public void Hello () public void Welcome ()}

// Klassekode

pakke MIS public class classA implementerer løsning {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Welcome to Edureka ')} offentlig statisk ugyldig hoved (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Produktion:

Hej Verden
Velkommen til Edureka

Erklæring om et Java-interface: Syntaks

interface interface_name {// erklære konstante felter // erklære metoder () // standardmetoder}

Lad os gennemgå et eksempel på Java Interface

Eksempel på Java-interface

Lad os oprette en simpel lommeregner baseret på Java-interface.

// Interface kode

pakke basicoperations offentlig grænseflade matematik {public void add () public void sub () public void mul () public void div ()}

// Klassekode

pakke basicoperations import java.util.Scanner public class student1 implementerer matematik {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Indtast to heltalsværdier for at udføre tilføjelse') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Summen af' + a + 'og' + b + 'er' + s)} @ Overstyr offentlig ugyldig sub () {Scanner kb = ny Scanner (System.in) System.out.println ('Indtast to heltalsværdier for at udføre substration') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Forskellen mellem' + a + 'og' + b + 'er' + s)} @ Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter en hvilken som helst to heltal multiplikation ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Produkt af '+ a +' og '+ b +' er '+ s)} @ Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values ​​division') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Kvotient af' + a + 'og' + b + 'er' + s)} offentlig statisk ugyldig hoved (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Produktion:

Når vi går videre, lærer vi at indlejre et Java-interface.

Indlejring af Java-grænsefladen

Interface indlejring er en proces med at erklære et interface inde i et andet Eksisterende grænseflade eller erklære en grænseflade inde i en Klasse. Den indlejrede grænseflade er også kendt som en Indre grænseflade.

Den indlejrede grænseflade er ikke tilgængelig direkte . Derfor er Nesting implementeret for at løse navneområderne ved at gruppere dem med deres relaterede Grænseflader og Klasser. Ved denne procedurevi kan kalde Indlejret grænseflade gennem Ydre klasse eller Ydre interface navn efterfulgt af a prik (.) og Interface navn.

Lad os prøve nogle eksempler baseret på Interface indlejring. Lad os først prøve at rede en Java-interface inde i en anden Java-interface som vist nedenfor:

// Interface kode

pakke Nest offentlig grænseflade OuterInterface {ugyldig skærm () grænseflade InnerInterface {ugyldig InnerMethod ()}}

// Klassekode

pakke Nest-klasse NestedInterfaceDemo implementerer 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 ('nPrinting from Nested InnerInterface method ...! n ')} offentlig statisk ugyldig hoved (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Produktion:

Første 10 termer: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Udskrivning fra Nested InnerInterface-metoden ...!

Lad os nu prøve at rede en Java-interface inde i en Java-klasse.

// Interface kode

pakke Nest2 public class EdurekaClass {interface EdurekaInterface {void NestedMethod ()}}

// Klassekode

pakke Nest2 klasse NestedInterfaceDemo2 implementerer EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] for (int i = 0Astray) .længde i ++) resultat [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 ()}}

Produktion:

akerudE

Selvom et interface næsten ligner en klasse, er der nogle forskelle mellem dem. Lad os diskutere deres forskelle.

Forskel mellem Java Class og Java Interface

INTERFACE KLASSE
Understøtter flere arv Understøtter ikke flere arv
Har ikke datamedlemmer Inkluderer datamedlemmer
Har ikke konstruktører Inkluderer konstruktører
Inkluderer ufuldstændige medlemmer (underskriftsmedlem) Omfatter både komplette (abstrakte) og ufuldstændige medlemmer
Har ikke adgangsmodifikatorer Inkluderer adgangsmodifikatorer
Interfacet har ikke statiske medlemmer Klassen har alle sine medlemmer som statisk

Fordele og ulemper ved Java Interface

Fordele:

  • Java-interface understøtter Flere arv.
  • Java Interface gør det muligt for programmører at opdele de komplekse programmeringsmetoder og forenkle afhængigheder mellem objekterne.
  • Java Interface gør datamedlemmer og metoder i en applikation, der skal kobles løst.

Ulemper:

  • Brug af Java Interface bringer ned udførelseshastighed af ansøgningen.
  • Java-grænseflader i applikationen bruges enten gentagne gange i stor udstrækning eller næsten ikke brugt overhovedet.

Nøglepunkter på Java-interface

  • Ingen af ​​metoderne, der er angivet i grænsefladen, har et organ, der gør det til at give fuldstændig abstraktion.
  • Det er ikke muligt at oprette et objekt i en grænseflade. Instantiering af et interface er derfor ikke mulig.
  • En klasse kan implementere en grænseflade ved hjælp af nøgleordsimplementerne. Lad os se dette gennem et eksempel.

// Interface kode

pakke extInterface offentlig grænseflade extInterface {public void method1 () public void method2 ()}

// Klassekode

pakke extInterface import java.util.Scanner klasse Edureka implementerer extInterface {public void method1 () {System.out.println ('implementering af metode1') Scannerscanner = ny Scanner (System.in) System.out.println ('Indtast nummer for at finde kvadratrod i Java: ') dobbelt kvadrat = scanner.nextDouble () dobbelt kvadratRoot = Math.sqrt (kvadrat) System.out.printf (' Kvadratrod af tal:% f er:% f% n ', kvadrat, squareRoot)} public void method2 () {System.out.println ('implementering af method2')} public static ugyldig main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Produktion:

implementering af metode1 Indtast nummer for at finde kvadratroden i Java: 16 Kvadratrod af nummer: 16.0 er: 4.0
  • En klasse kan implementere flere arv på en enkelt forekomst. Lad os forstå det gennem følgende kode.

// Interface 1-kode

pakke ExtendInt public interface Interface1 {public void armstrong ()}

// Interface 2-kode

pakke ExtendInt offentlig grænseflade Interface2 {public void prime ()} // Klassekode pakke ExtendInt public class Edureka2 implementerer Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n mens (n ​​& gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} hvis (temp == c) System.out.println ('armstrong number') ellers System.out.println ('Not armstrong number') System.out.println ('Extending to Interface 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // input m = n / 2 if (n == 0 || n == 1) {System.out.println (n + 'er ikke primtal')} ellers {for (i = 2i & lt = mi ++) {hvis (n% i == 0) {System .out.println (n + 'er ikke primtal') flag = 1 pause}} hvis (flag == 0) {System.out.println (n + 'er primtal')}} System.out.println ('Udvider til interface 2 ')} offentlig statisk ugyldig hoved (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Produktion:

3 er primtal udvider til interface 2 armstrong nummer udvider til interface 1
  • Java-interface kræver, at de erklærede variabler initialiseres på erklæringstidspunktet.
  • Adgangsmodifikatorer til en grænseflade er som standard indstillet til offentlig statisk og endelig. Lad os forstå dette ved et eksempel

// Interface kode

pakke test offentlig grænseflade Prøv {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Alle ovenstående erklæringer er sande og gyldige i et interface.
  • Java-interface er i stand til at udvide et hvilket som helst antal grænseflader, men kan aldrig implementere en.
  • En Java-klasse kan implementere et hvilket som helst antal grænseflader.
  • Java Class kan ikke implementere grænseflader med samme metode navn og anden returtype.
  • Hvis der er to eller flere metoder med det samme metodenavn, findes i flere grænseflader, er det nok at implementere metoden én gang. Lad os forstå dette med et praktisk eksempel.

// Interface kode

pakke samme offentlige grænseflade A {public void display ()} // Interface Code package same public interface B {public void display ()} // Class Code package same class same implements A, B {public void display () {System.out .println ('displaying data')} public static void main (String [] args) {same print = new same () print.display ()}}

Produktion:

Velkommen til Edureka E-Learning

Med dette kommer vi til slutningen af ​​denne artikel. Jeg håber, du har forstået vigtigheden af ​​grænseflade, syntaks, funktionalitet, grænsefladeindlejring, nøglepunkter i Java-grænseflade og handlinger, der udføres ved hjælp af dem.

Nu hvor du har forstået det grundlæggende i Java, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Forår .

Har du et spørgsmål til os? Nævn det i kommentarfeltet på denne 'Java Interface' -blog, og vi vender tilbage til dig hurtigst muligt.