Τι είναι η διασύνδεση στην Java και πώς να την εφαρμόσετε;



Αυτό το άρθρο θα σας βοηθήσει με μια ολοκληρωμένη προσέγγιση για το Java Interface και τους διάφορους τύπους παραδειγμάτων που σχετίζονται με τη λειτουργικότητά του.

' Διεπαφή είναι ένα προηγμένο επίπεδο επίτευξης της αφαίρεσης στη γλώσσα προγραμματισμού Java. Η διεπαφή Java βοηθά στο μείωση της πολυπλοκότητας στον κώδικα και απλοποιεί το ευανάγνωστο . Σε αυτό το άρθρο, θα σας εξηγήσω το Java Interface μέσω της ακόλουθης υποδοχής.

Τι είναι η διασύνδεση Java;

Διεπαφή υπολογιστή είναι γνωστό ως όριο που χωρίζει δύο ή περισσότερα συστήματα. Ανταλλάσσει δεδομένα μεταξύ των στοιχείων σε ένα σύστημα που θα μπορούσε να σηματοδοτήσει, εντολές ή πρωτόκολλα.





java-interface

Η Java Abstraction παρέχει τη λειτουργικότητα μιας συγκεκριμένης μεθόδου αποκρύπτοντας τη λογική υλοποίησης που γράφτηκε μέσα στη μέθοδο. Ομοίως, το Java Interface είναι επίσης μια αφηρημένη κλάση που περιλαμβάνει τη δήλωση μεθόδου αλλά όχι τον ορισμό της. Μια τάξη υλοποιεί μια διεπαφή για να κληρονομήσει τις αφηρημένες μεθόδους. Μαζί με αφηρημένες μεθόδους, ένα διεπαφή μπορεί επίσης να περιλαμβάνει σταθερές, στατικές μέθοδοι, ένθετες διεπαφές και προεπιλεγμένες μέθοδοι.



Ομοιότητες μεταξύ κλάσης και διασύνδεσης.

Μια διεπαφή είναι εντελώς παρόμοια με μια κανονική τάξη στην Java. Μια διεπαφή περιλαμβάνει τις αφηρημένες μεθόδους και αυτές οι μέθοδοι έχουν σχεδιαστεί για εφαρμογή. Αυτή η διαδικασία είναι απλώς ίση με την κληρονομιά, η οποία είναι φυσιολογική όταν πρόκειται για τάξεις. Θα συζητήσουμε περισσότερα σχετικά με τις ομοιότητες.

  • Το ίδιο με μια τάξη, μια διεπαφή μπορεί επίσης να περιέχει όσους αριθμούς μεθόδων απαιτείται.
  • Παρόμοια με τα μαθήματα, η διεπαφή γράφεται επίσης με ένα .Ιάβα αρχείο επέκτασης.
  • Παραδόξως, ο κωδικός bytec για μια διεπαφή θα εμφανιζόταν σε ένα .τάξη αρχείο.
  • Μια διεπαφή εμφανίζεται με τη μορφή ενός πακέτου και ο αντίστοιχος bytecode τους βρίσκεται σε έναν κατάλογο που ταιριάζει με το όνομα του πακέτου.

Γιατί χρειαζόμαστε μια διεπαφή;

Η Java δεν υποστηρίζει Πολλαπλές κληρονομικότητες, Λόγω αυτού, δεν θα επιτρέψει στις τάξεις να επεκτείνουν περισσότερες από μία τάξεις σε μια περίπτωση. Παιδικά μαθήματα δεν μπορούσε να κληρονομήσει τις ιδιότητες του πολλαπλές τάξεις γονέων σε μία μόνο περίπτωση, όπως καταλήγει Πρόβλημα με διαμάντια. Για να ξεπεραστεί αυτό το ζήτημα, Διεπαφή εισάγεται. Ας κατανοήσουμε αυτό το πρόβλημα μέσω ενός παραδείγματος.



Ας υποθέσουμε ότι έχουμε δύο επίπεδα, το ένα μπορεί να μεταφέρει μόνο επιβάτες, το άλλο μόνο θέση. Τώρα, πρέπει να το κάνουμε κληρονομώ τις ιδιότητες του αεροπλάνου φορτίου και του επιβατικού αεροπλάνου. Η Java δεν θα υποστηρίξει αυτήν τη λύση καθώς καταλήγει ασάφεια μεταξύ των δύο επιπέδων.

Αλλά, εάν μπορείτε να το κάνετε εφικτό κάνοντας την Java να αισθάνεται ότι κληρονομεί ένα αεροπλάνο και εφαρμογή τις μεθόδους που υπάρχουν στο άλλο επίπεδο. Είναι σαν ένα εμπορικό αεροπλάνο που μεταφέρει επιβάτες και αποσκευές φορτίου. Η διασύνδεση είναι σαν να φτιάχνεις ένα μεγαλύτερο αεροπλάνο που θα μπορούσε να κάνει και τις δύο εργασίες χωρίς να παρεμβαίνει στα συστατικά του άλλου, αντί να δανείζεται απλώς τις μεθόδους από το Κατηγορία διασύνδεσης.

// Κωδικός κλάσης Α

πακέτο πολλαπλών κατηγοριών Α {void msg () {System.out.println ('Hello')}}

// Κωδικός κλάσης Β

πακέτο πολλαπλών κατηγοριών B {void msg () {System.out.println ('Welcome')}}

Κωδικός Κλάσης Γ

πακέτο πολλαπλών τάξεων C επεκτείνεται A, B {// Αυτό δεν θα γίνει αποδεκτό από την Java, θα ρίξει ένα σφάλμα και ο κώδικας δεν θα εκτελεστεί. δημόσιος στατικός κενός κενός (String args []) {C obj = new C () obj.msg ()}}

Παραγωγή:

Λάθος. Αυτή η συγκεκριμένη προσέγγιση αποτελεί εξαίρεση. Η Java δεν υποστηρίζει πολλαπλές κληρονομίες. Αυτό το σφάλμα είναι γνωστό ως Πρόβλημα με διαμάντια 

Ας δοκιμάσουμε μια λύση χρησιμοποιώντας μια διεπαφή, Παιδικές τάξεις μπορεί να έχει πρόσβαση στις μεθόδους από Πολλοί γονείς τάξεις σε μία μόνο παρουσία.

// Κωδικός διασύνδεσης

πακέτο MIS δημόσια διεπαφή λύση {public void Hello () public void Welcome ()}

// Κωδικός τάξης

ταξινόμηση ενός πίνακα στο πρόγραμμα c ++
πακέτο MIS public class classA υλοποιεί λύση {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Καλώς ήλθατε στο Edureka ')} δημόσιος στατικός κενός κενός (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Παραγωγή:

Γειά σου Κόσμε
Καλώς ήλθατε στο Edureka

Δήλωση διεπαφής Java: Σύνταξη

interface interface_name {// δήλωση σταθερών πεδίων // δήλωση μεθόδων () // προεπιλεγμένες μέθοδοι}

Ας δούμε ένα παράδειγμα στο Java Interface

Παράδειγμα διασύνδεσης Java

Ας δημιουργήσουμε έναν απλό Αριθμομηχανή με βάση το Java Interface.

// Κωδικός διασύνδεσης

πακέτο basicoperations δημόσια διεπαφή μαθηματικά {public void add () public void sub () public void mul () public void div ()}

// Κωδικός τάξης

πακέτο basicoperations εισαγωγή java.util.Scanner δημόσια τάξη μαθητής1 εφαρμόζει μαθηματικά {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Εισαγάγετε δύο ακέραιες τιμές για την εκτέλεση προσθήκης') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Άθροισμα' + a + 'και' + b + 'είναι' + s)} @ Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Εισαγάγετε δύο ακέραιες τιμές για εκτέλεση αφαίρεσης') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Διαφορά' + a + 'και' + b + 'είναι' + s)} @ Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter οποιοσδήποτε πολλαπλασιασμός δύο ακέραιων τιμών ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Product of '+ a +' και '+ b +' is '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Εισαγάγετε οποιαδήποτε διαίρεση δύο ακέραιων τιμών') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Quotient of' + a + 'και' + b + 'is' + s)} δημόσιο στατικό κενό (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Παραγωγή:

Προχωρώντας περαιτέρω, θα μάθουμε να τοποθετούμε ένα Java Interface.

Ένθεση της διασύνδεσης Java

Ένθεση διασύνδεσης είναι μια διαδικασία δήλωσης μιας διασύνδεσης μέσα σε μια άλλη Υφιστάμενη διεπαφή ή δηλώνει μια διεπαφή μέσα σε ένα Τάξη. Η ένθετη διεπαφή είναι επίσης γνωστή ως Εσωτερική διεπαφή.

Δεν είναι δυνατή η πρόσβαση στην ένθετη διεπαφή κατευθείαν . Ως εκ τούτου, το Nesting εφαρμόζεται για την επίλυση των Namespaces ομαδοποιώντας τα με τα σχετικά Διεπαφές και Μαθήματα. Με αυτήν τη διαδικασία,μπορούμε να καλέσουμε το Ένθετη διεπαφή μέσα από Εξωτερική τάξη ή Εξωτερική διεπαφή όνομα ακολουθούμενο από α τελεία( . ) , και Όνομα διεπαφής.

Ας δοκιμάσουμε μερικά παραδείγματα με βάση Ένθεση διασύνδεσης. Αρχικά, ας προσπαθήσουμε να φωλιάσουμε ένα Διεπαφή Java μέσα σε ένα άλλο Διεπαφή Java όπως φαίνεται παρακάτω:

// Κωδικός διασύνδεσης

πακέτο Nest δημόσια διεπαφή OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

// Κωδικός τάξης

πακέτο Nest class NestedInterfaceDemo υλοποιεί 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 ('n Εκτύπωση από τη μέθοδο Nested InnerInterface ...! n ')} δημόσιος στατικός κενός κενός (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Παραγωγή:

Πρώτοι 10 όροι: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Εκτύπωση από τη μέθοδο Nested InnerInterface ...!

Τώρα, ας προσπαθήσουμε να φωλιάσουμε ένα Διεπαφή Java μέσα σε ένα Τάξη Java.

// Κωδικός διασύνδεσης

πακέτο Nest2 δημόσια τάξη EdurekaClass {interface EdurekaInterface {void NestedMethod ()}}

// Κωδικός τάξης

το πακέτο Nest2 class NestedInterfaceDemo2 υλοποιεί το EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] αποτέλεσμα = νέο byte [strAsByteArray.length] itr .length i ++) αποτέλεσμα [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (new String (result))} δημόσιο στατικό κενό (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

Παραγωγή:

akerudE

Παρόλο που μια διεπαφή μοιάζει σχεδόν με μια τάξη, υπάρχουν κάποιες διαφορές μεταξύ τους, ας συζητήσουμε τις διαφορές τους.

Διαφορά μεταξύ Java Class και Java Interface

ΔΙΕΠΑΦΗ ΤΑΞΗ
Υποστηρίζει πολλαπλή κληρονομικότητα Δεν υποστηρίζει πολλαπλή κληρονομικότητα
Δεν διαθέτει μέλη δεδομένων Περιλαμβάνει μέλη δεδομένων
Δεν έχει Κατασκευαστές Περιλαμβάνει Κατασκευαστές
Περιλαμβάνει ημιτελή μέλη (μέλος υπογραφής) Περιλαμβάνει τόσο ολοκληρωμένα (αφηρημένα) όσο και ελλιπή μέλη
Δεν διαθέτει τροποποιητές πρόσβασης Περιλαμβάνει τροποποιητές πρόσβασης
Η διεπαφή δεν έχει Στατικά Μέλη Η τάξη έχει όλα τα μέλη της ως Στατική

Πλεονεκτήματα και μειονεκτήματα της διασύνδεσης Java

Πλεονεκτήματα:

  • Υποστηρίζει Java Interface Πολλαπλή κληρονομικότητα.
  • Το Java Interface επιτρέπει στους προγραμματιστές να διαλύσουν τις πολύπλοκες προσεγγίσεις προγραμματισμού και να απλοποιήσουν το εξαρτήσεις μεταξύ των αντικειμένων.
  • Το Java Interface κάνει το μέλη δεδομένων και μεθόδους σε μια εφαρμογή που θα συνδέεται χαλαρά.

Μειονεκτήματα:

  • Η χρήση του Java Interface μειώνει το ταχύτητα εκτέλεσης της εφαρμογής.
  • Οι διεπαφές Java στην εφαρμογή είτε χρησιμοποιούνται επανειλημμένα σε μεγάλο βαθμό είτε σχεδόν καθόλου χρησιμοποιούνται.

Βασικά σημεία στη διασύνδεση Java

  • Καμία από τις μεθόδους που δηλώνονται στη διεπαφή δεν έχει σώμα που το καθιστά πλήρη αφαίρεση.
  • Δεν είναι δυνατή η δημιουργία αντικειμένου μιας διεπαφής. Ως εκ τούτου, δεν είναι δυνατή η εγκατάσταση ενός περιβάλλοντος εργασίας.
  • Μια τάξη μπορεί να εφαρμόσει μια διεπαφή χρησιμοποιώντας τα εργαλεία λέξεων-κλειδιών. Ας το δούμε μέσα από ένα παράδειγμα.

// Κωδικός διασύνδεσης

πακέτο extInterface δημόσια διεπαφή extInterface {public void method1 () public void method2 ()}

// Κωδικός τάξης

package extInterface import java.util.Scanner class Edureka εφαρμόζει extInterface {public void method1 () {System.out.println ('implementation of method1') Scanner scanner = new Scanner (System.in) System.out.println ('Enter number για να βρείτε τετραγωνική ρίζα στην Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Square root of number:% f is:% f% n ', square, squareRoot)} public void method2 () {System.out.println ('implementation of method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Παραγωγή:

εφαρμογή της μεθόδου1 Εισαγάγετε τον αριθμό για να βρείτε τετραγωνική ρίζα σε Java: 16 Τετραγωνική ρίζα του αριθμού: 16.0 είναι: 4.0
  • Μια τάξη μπορεί να εφαρμόσει πολλαπλές κληρονομίες σε μία μόνο παρουσία. Ας το καταλάβουμε μέσω του παρακάτω κώδικα.

// Κωδικός διασύνδεσης 1

πακέτο ExtendInt public interface Interface1 {public void armstrong ()}

// Κωδικός διασύνδεσης 2

πακέτο ExtendInt δημόσια διεπαφή Interface2 {public void prime ()} // Class Code πακέτο ExtendInt δημόσια κλάση Edureka2 υλοποιεί Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n ενώ (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} εάν (temp == c) System.out.println ('armstrong number') άλλο 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 // είσοδος m = n / 2 εάν (n == 0 || n == 1) {System.out.println (n + 'is not prime number')} other {for (i = 2i & lt = mi ++) {if (n% i == 0) {Σύστημα .out.println (n + 'is not prime number') flag = 1 break}} if (flag == 0) {System.out.println (n + 'is prime number')}} System.out.println ('Επέκταση για διασύνδεση 2 ')} δημόσιο στατικό κενό κεντρικό (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Παραγωγή:

3 είναι πρωταρχικός αριθμός Επέκταση στη διεπαφή 2 armstrong αριθμός Επέκταση στη διεπαφή 1
  • Το Java Interface απαιτεί οι μεταβλητές που δηλώνονται να αρχικοποιηθούν τη στιγμή της δήλωσης.
  • Οι τροποποιητές πρόσβασης για μια διεπαφή ορίζονται σε δημόσια στατική και τελική από προεπιλογή. Ας το καταλάβουμε με ένα παράδειγμα

// Κωδικός διασύνδεσης

πακέτο δοκιμής δημόσια διεπαφή Δοκιμάστε το {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Όλες οι παραπάνω δηλώσεις είναι αληθείς και ισχύουν μέσα σε μια διεπαφή.
  • Το Java Interface είναι ικανό να επεκτείνει οποιονδήποτε αριθμό διασυνδέσεων, αλλά δεν μπορεί ποτέ να το εφαρμόσει.
  • Μια κλάση Java μπορεί να εφαρμόσει οποιονδήποτε αριθμό διεπαφών.
  • Η κλάση Java δεν μπορεί να εφαρμόσει διεπαφές με το ίδιο όνομα μεθόδου και διαφορετικό τύπο επιστροφής.
  • Εάν υπάρχουν δύο ή περισσότερες μέθοδοι με το ίδιο όνομα μεθόδου, υπάρχουν σε πολλές διεπαφές, τότε αρκεί η εφαρμογή της μεθόδου για μία φορά. Ας το καταλάβουμε με ένα πρακτικό παράδειγμα.

// Κωδικός διασύνδεσης

πακέτο ίδια δημόσια διεπαφή A {public void display ()} // Interface Code package ίδια δημόσια διεπαφή B {public void display ()} // Class Code πακέτο ίδιας κλάσης ίδια εφαρμογή A, B {public void display () {System.out .println ('displaying data')} δημόσιος στατικός κενός κενός (String [] args) {same print = new same () print.display ()}}

Παραγωγή:

Καλώς ήλθατε στο Edureka E-Learning

Με αυτό, φτάνουμε στο τέλος αυτού του άρθρου. Ελπίζω να έχετε καταλάβει τη σημασία της διεπαφής, της σύνταξης, της λειτουργικότητας, της διασύνδεσης διασύνδεσης, των βασικών σημείων της διεπαφής Java και των λειτουργιών που εκτελούνται χρησιμοποιώντας αυτά.

Τώρα που έχετε κατανοήσει τα βασικά της Java, ρίξτε μια ματιά στο από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για φοιτητές και επαγγελματίες που θέλουν να γίνουν προγραμματιστές Java. Το μάθημα έχει σχεδιαστεί για να σας δώσει μια πρώτη αρχή στον προγραμματισμό Java και να σας εκπαιδεύσει τόσο για βασικές όσο και για προχωρημένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Ανοιξη .

Έχετε μια ερώτηση για εμάς; Αναφέρετέ το στην ενότητα σχολίων αυτού του ιστολογίου «Java Interface» και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.