Hva er grensesnitt i Java og hvordan implementerer jeg det?



Denne artikkelen vil hjelpe deg med en omfattende tilnærming til Java Interface og de forskjellige typene eksempler relatert til funksjonaliteten.

' Grensesnitt er et avansert nivå for å oppnå abstraksjon i Java Programming Language. Java-grensesnitt hjelper i reduksjon av kompleksitet i koden og forenkler lesbarhet . I denne artikkelen vil jeg forklare deg Java Interface gjennom følgende docket.

Hva er et Java-grensesnitt?

Datagrensesnitt er kjent som en grense som skiller to eller flere systemer. Den utveksler data mellom komponentene i et system som kan signalisere, kommandoer eller protokoller.





java-interface

Java Abstraction gir funksjonaliteten til en bestemt metode ved å skjule implementeringslogikken skrevet i metoden. Tilsvarende er Java-grensesnitt også en abstrakt klasse som inkluderer metodedeklarasjonen, men ikke dens definisjon. En klasse redskaper et grensesnitt for å arve de abstrakte metodene. Sammen med abstrakte metoder, an grensesnitt kan også inkludere konstanter, statiske metoder, nestede grensesnitt og standardmetoder.



Likheter mellom en klasse og et grensesnitt.

Et grensesnitt er helt likt en vanlig klasse i Java. Et grensesnitt inkluderer abstrakte metoder og disse metodene er designet for å implementeres. Denne prosessen er bare lik arv, noe som er normalt når det gjelder klasser. Vi vil diskutere mer om likheter.

  • Samme som en klasse, kan et grensesnitt også inneholde så mange antall metoder som kreves.
  • I likhet med klasser, er grensesnittet også skrevet med en .java utvidelsesfil.
  • Overraskende nok vil bytekoden for et grensesnitt ha dukket opp i en .klasse fil.
  • Et grensesnitt vises i form av en pakke, og deres respektive bytekode er i en katalog som samsvarer med pakkenavnet.

Hvorfor trenger vi et grensesnitt?

Java støtter ikke Flere arv, på grunn av dette, vil det ikke tillate klassene å utvide mer enn en klasse på en forekomst. Barneklasser kunne ikke arve egenskapene til flere foreldreklasser i en enkelt forekomst, slik det resulterer i Diamantproblem. For å løse dette problemet, Grensesnitt blir introdusert. La oss forstå dette problemet gjennom et eksempel.



hvordan konvertere et tall til binært i python

La oss anta at vi har to plan, det ene kan bare bære passasjerer, bare den andre stilling. Nå må vi arve egenskapene til både lasteplanet og passasjerflyet. Java støtter ikke denne løsningen da den havner i tvetydighet mellom de to flyene.

Men hvis du kan gjøre det mulig ved å få Java til å føle at den arver ett plan og implementering metodene som er tilstede i det andre planet. Det er som et kommersielt fly som tar både passasjerer og bagasje. Grensesnittet er som å lage et større plan som kan gjøre begge oppgavene uten å forstyrre komponentene til hverandre, i stedet bare låne metodene fra Grensesnittklasse.

// Klasse A-kode

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

// Klasse B-kode

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

Klasse C-kode

pakke flere klasse C utvider A, B {// Dette aksepteres ikke av Java, det vil kaste en feil og kode vil ikke bli utført. public static void main (String args []) {C obj = new C () obj.msg ()}}

Produksjon:

Feil. Denne spesielle tilnærmingen kaster et unntak. Java støtter ikke flere arv. Denne feilen er kjent som Diamantproblem 

La oss prøve en løsning ved å bruke et grensesnitt, Barneklasser kan få tilgang til metodene fra Flere foreldre klasser i en enkelt forekomst.

// Grensesnittkode

pakke MIS offentlig grensesnittløsning {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 ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Produksjon:

Hei Verden
Velkommen til Edureka

Erklære et Java-grensesnitt: syntaks

grensesnitt grensesnittnavn {// erklære konstante felt // erklære metoder () // standardmetoder}

La oss gå gjennom et eksempel på Java Interface

Eksempel på Java-grensesnitt

La oss lage en enkel kalkulator basert på Java-grensesnitt.

// Grensesnittkode

pakke grunnleggende operasjoner offentlig grensesnitt matematikk {public void add () public void sub () public void mul () public void div ()}

// Klassekode

pakke grunnleggende operasjoner importerer java.util.Scanner public class student1 implementerer matematikk {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Skriv inn to heltallverdier for å utføre tillegg') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Sum av' + a + 'og' + b + 'er' + s)} @ Overstyr offentlig ugyldig sub () {Scanner kb = new Scanner (System.in) System.out.println ('Skriv inn to heltallverdier for å utføre substraksjon') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Forskjellen mellom' + a + 'og' + b + 'er' + s)} @ Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter hvilken som helst to heltalls multiplikasjon ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Produkt av '+ 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 av' + a + 'og' + b + 'er' + s)} offentlig statisk ugyldig hoved (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Produksjon:

Videre videre vil vi lære å hekke et Java-grensesnitt.

Reder Java-grensesnittet

Grensesnitt hekkende er en prosess med å erklære et grensesnitt i et annet Eksisterende grensesnitt eller erklære et grensesnitt inne i Klasse. Nested Interface er også kjent som en Indre grensesnitt.

Det nestede grensesnittet er ikke tilgjengelig direkte . Derfor er Nesting implementert for å løse navnene ved å gruppere dem med deres relaterte Grensesnitt og Klasser. Ved denne prosedyren,vi kan kalle Nestet grensesnitt gjennom Ytre klasse eller Ytre grensesnitt navn etterfulgt av a punktum( . ) , og Grensesnittnavn.

La oss prøve noen eksempler basert på Grensesnitt hekkende. La oss først prøve å hekke en Java-grensesnitt inne i en annen Java-grensesnitt som vist under:

// Grensesnittkode

pakke Nest offentlige grensesnitt OuterInterface {void display () interface InnerInterface {void 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 ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Produksjon:

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

La oss prøve å hekke en Java-grensesnitt inne i en Java-klasse.

// Grensesnittkode

pakke Nest2 offentlig klasse EdurekaClass {grensesnitt EdurekaInterface {ugyldig NestedMethod ()}}

// Klassekode

i c ++
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 = 0) .length 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 ()}}

Produksjon:

akerudE

Selv om et grensesnitt ser nesten ut som en klasse, er det noen forskjeller mellom dem. La oss diskutere forskjellene deres.

Forskjellen mellom Java Class og Java Interface

GRENSESNITT KLASSE
Støtter flere arv Støtter ikke flere arv
Har ikke datamedlemmer Inkluderer datamedlemmer
Har ikke konstruktører Inkluderer konstruksjoner
Inkluderer ufullstendige medlemmer (signaturmedlem) Inkluderer både komplette (abstrakte) og ufullstendige medlemmer
Har ikke tilgangsmodifikatorer Inkluderer tilgangsmodifikatorer
Grensesnittet har ikke statiske medlemmer Klassen har alle sine medlemmer som Statisk

Fordeler og ulemper ved Java Interface

Fordeler:

  • Java Interface støtter Flere arv.
  • Java Interface gjør det mulig for programmerere å bryte opp de komplekse programmeringsmetodene og forenkle avhengigheter mellom gjenstandene.
  • Java Interface gjør data medlemmer og metoder i en applikasjon som skal kobles løst.

Ulemper:

  • Bruk av Java Interface bringer ned utførelseshastighet av søknaden.
  • Java-grensesnitt i applikasjonen brukes enten gjentatte ganger i stor grad eller knapt brukt i det hele tatt.

Nøkkelpunkter på Java-grensesnitt

  • Ingen av metodene som er angitt i grensesnittet har en kropp som gjør at den gir fullstendig abstraksjon.
  • Det er ikke mulig å lage et objekt av et grensesnitt. Instantiering av et grensesnitt er derfor ikke mulig.
  • En klasse kan implementere et grensesnitt ved å bruke søkeordredskapene. La oss se dette gjennom et eksempel.

// Grensesnittkode

pakke extInterface offentlig grensesnitt 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 av method1') Scanner scanner = new Scanner (System.in) System.out.println ('Enter number for å finne kvadratrot i Java: ') dobbelt kvadrat = scanner.nextDouble () dobbelt kvadratRoot = Math.sqrt (kvadrat) System.out.printf (' Kvadratrot av tall:% f er:% f% n ', kvadrat, squareRoot)} public void method2 () {System.out.println ('implementering av method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Produksjon:

implementering av metode1 Tast inn nummer for å finne kvadratrot i Java: 16 Kvadratrot av nummer: 16.0 er: 4.0
  • En klasse kan implementere flere arv på en enkelt forekomst. La oss forstå det gjennom følgende kode.

// Grensesnitt 1-kode

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

// Grensesnitt 2-kode

pakke ExtendInt public interface Interface2 {public void prime ()} // Class Code package 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 primtall')} annet {for (i = 2i & lt = mi ++) {hvis (n% i == 0) {System .out.println (n + 'er ikke primtall') flagg = 1 pause}} hvis (flagg == 0) {System.out.println (n + 'er primtall')}} System.out.println ('Extending til grensesnitt 2 ')} offentlig statisk tomrom hoved (String args []) {Grensesnitt2 obj = ny Edureka2 () obj.prime () Grensesnitt1 obj1 = ny Edureka2 () obj1.armstrong ()}}

Produksjon:

3 er primtall Utvides til grensesnitt 2 armstrong nummer Utvides til grensesnitt 1
  • Java-grensesnitt krever at deklarerte variablene initialiseres på erklæringstidspunktet.
  • Tilgangsmodifikatorer for et grensesnitt er satt til offentlig statisk og endelig som standard. La oss forstå dette med et eksempel

// Grensesnittkode

pakketest offentlig grensesnitt Prøv {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Alle ovennevnte erklæringer er sanne og gyldige i et grensesnitt.
  • Java Interface er i stand til å utvide et hvilket som helst antall grensesnitt, men kan aldri implementere en.
  • En Java-klasse kan implementere et hvilket som helst antall grensesnitt.
  • Java Class kan ikke implementere grensesnitt med samme metodenavn og annen returtype.
  • Hvis det finnes to eller flere metoder med samme metodenavn, som finnes i flere grensesnitt, er det nok å implementere metoden en gang. La oss forstå dette med et praktisk eksempel.

// Grensesnittkode

pakke samme offentlige grensesnitt 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 ()}}

Produksjon:

Velkommen til Edureka E-Learning

Med dette kommer vi til en slutt på denne artikkelen. Jeg håper du har forstått viktigheten av grensesnitt, syntaks, funksjonalitet, grensesnitthekking, viktige punkter i Java-grensesnitt og operasjoner utført ved hjelp av dem.

Nå som du har forstått det grunnleggende om Java, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Vår .

Har du et spørsmål til oss? Nevn det i kommentarfeltet til denne 'Java Interface' -bloggen, så kommer vi tilbake til deg så snart som mulig.