Ποια είναι η διαφορά μεταξύ Abstract Class και Interface στην Java;



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

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

Τα θέματα που συζητούνται σε αυτό το άρθρο είναι τα εξής:





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

Τι είναι το Abstract Class στην Java;

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



Σημείωση: Ενα αφηρημένη μέθοδος , είναι μια μέθοδος που δεν εφαρμόζεται στη θέση της και προσθέτειελλιπής προς τάξη .

πακέτο MyPackage // abstract class abstract class Animal {String AnimalName = 'Animal (String name) {this.AnimalName = name} // δηλώνουν μη αφηρημένες μεθόδους // έχει προεπιλεγμένη εφαρμογή δημόσιο κενό BasicInfo (String λεπτομέρειες) {Σύστημα. out.println (this.AnimalName + '+ details)} // αφηρημένες μέθοδοι που θα // εφαρμόζονται από τις υποκατηγορίες αφηρημένων δημόσιων κενού ενδιαιτημάτων () αφηρημένη δημόσια κενή αναπνοή ()} κλάση Επίγεια εκτείνεται Ζώο {// κατασκευαστής Terrestrial (String name) {super (name)} @Override public void habitat () {System.out.println ('άδεια στην ξηρά και')} @Override public void respiratory () {System.out.println ('respirire μέσω πνευμόνων ή τραχείας. ')}} Η κλάση Aquatic επεκτείνει το Animal {// constructor Aquatic (String name) {super (name)} @Override public void habitat () {System.out.println (' Φεύγει στο νερό και ') } @Override δημόσια κενή αναπνοή () {System.out.println ('αναπνοή μέσω βράγχων ή του δέρματος τους.')}} Κλάση AbstractClassDemo {public static voi d main (String [] args) {// δημιουργία αντικειμένου επίγειας κλάσης // και χρήση αναφοράς κλάσης ζώων. Animal object1 = νέο επίγειο αντικείμενο («Άνθρωποι») αντικείμενο 1. BasicInfo («είναι επίγεια όντα, αυτά») object1.habitat () object1.resppiration () System.out.println (') // δημιουργία αντικειμένων της κατηγορίας Animal circle object2 = new Aquatic ('Fishes') object2.BasicInfo ('are aqautic πλάσματα, them') object2.habitat () object2.resppiration ()}}

Παραγωγή

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

ο Βασικές πληροφορίες () είναι μια μέθοδος κοινής χρήσης από Γήινος και Υδάτινος τάξεις. Από Κατηγορία ζώων δεν μπορεί να ξεκινήσει, δημιουργούμε τα αντικείμενα του Γήινος και Υδάτινος τάξεις για προγραμματισμό. Στη συνέχεια, έχουμε διεπαφές.



Διεπαφή σε Java

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

πακέτο MyPackage interface Animals {// abstract Methods void habitat () void respiratory ()} class TerrestrialA υλοποιεί Animals {String AnimalName = '// buildor TerrestrialA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'άδεια στην ξηρά και')} @ Override public void respiratory () {System.out.println ('αναπνοή μέσω πνευμόνων ή τραχείας.')}} Κλάσης AquaticA εφαρμόζει ζώα {String AnimalName = '// buildor AquaticA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'άδεια στο νερό και')} @Override public void respiratory () {System.out.println ('αναπνεύστε μέσω βράγχων ή του δέρματος τους.')}} Κλάση JavaInterfaceDemo {public static void main (String [] args) {// δημιουργία αντικειμένου επίγειας κλάσης // και χρήση αναφοράς κλάσης ζώων . Animals object1 = new TerrestrialA ('Humans') object1.habitat () object1.resppiration () System.out.println ('') // δημιουργία αντικειμένων κύκλου κατηγορίας Animals object2 = new AquaticA ('Fishes') object2.habitat () αντικείμενο2. αναπνοή ()}}

Παραγωγή

Οι άνθρωποι φεύγουν στην ξηρά και αναπνέουν μέσω πνευμόνων ή τραχείας. Τα ψάρια αφήνονται στο νερό και αναπνέουν μέσω βράγχων ή του δέρματος τους.

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

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

Abstract Class vs Interface

Ο παρακάτω πίνακας παραθέτει τις βασικές διαφορές μεταξύ της αφηρημένης κλάσης και της διεπαφής.

Παράμετρος Περίληψη τάξη Διεπαφή

Προεπιλεγμένη εφαρμογή μεθόδου

Μπορεί να έχει προεπιλεγμένη εφαρμογή μεθόδου

Οι διεπαφές παρέχουν καθαρή αφαίρεση και δεν μπορούν να έχουν καθόλου εφαρμογή

Μεταβλητές

Μπορεί να περιέχει μη τελικές μεταβλητές.

Οι μεταβλητές που δηλώνονται σε μια διεπαφή είναι από προεπιλογή τελικές

Χρησιμοποιείται λέξη-κλειδί

Μια αφηρημένη τάξη μπορεί να επεκταθεί χρησιμοποιώντας τη λέξη-κλειδί «επεκτείνεται

Η διεπαφή πρέπει να υλοποιηθεί χρησιμοποιώντας λέξεις-κλειδιά ï

Τροποποιητές πρόσβασης

Μπορώέχουν δημόσιο, προστατευμένο, ιδιωτικό και προεπιλεγμένο τροποποιητή

Οι μέθοδοι διεπαφής είναι από προεπιλογή δημόσιες. δεν μπορείτε να χρησιμοποιήσετε οποιονδήποτε άλλο τροποποιητή πρόσβασης μαζί του

Ταχύτητα υλοποίησης

Είναι ταχύτερο από τη διεπαφή

Μια διεπαφή είναι κάπως πιο αργή και απαιτεί επιπλέον έμμεση

Κανονική τάξη

Μπορεί να επεκτείνει μόνο μία αφηρημένη τάξη

Μπορεί να εφαρμόσει πολλαπλές διεπαφές

Κατασκευαστές

Μια αφηρημένη τάξη μπορεί να έχει κατασκευαστές

Μια διεπαφή δεν μπορεί να έχει κατασκευαστές

Το js έχει μήκος πίνακα

Πολλαπλή κληρονομικότητα

Μια αφηρημένη κλάση μπορεί να επεκτείνει μια άλλη κλάση και μπορεί να εφαρμόσει πολλές διεπαφές Java

Η διεπαφή μπορεί να επεκτείνει μόνο μια άλλη διεπαφή Java

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

Πότε να χρησιμοποιήσετε το Abstract Class & Πότε να χρησιμοποιήσετε το Interface;

Σκεφτείτε να χρησιμοποιήσετε αφηρημένες τάξεις στις ακόλουθες περιπτώσεις:

  • Εάν έχετε κάποιες σχετικές τάξεις που πρέπει να μοιραστούν το ίδιες γραμμές κώδικα
  • Όταν θέλετε να ορίσετε το μη στατικά ή μη τελικά πεδία
  • Όταν υπάρχουνμεθόδους ή πεδίαή απαιτούν τροποποιητές πρόσβασης εκτός από το κοινό (όπως προστατευμένο και ιδιωτικό)

Εξετάστε το ενδεχόμενο χρήσης διεπαφών στις ακόλουθες περιπτώσεις:

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

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

Βεβαιωθείτε ότι ασκείστε όσο το δυνατόν περισσότερο και επαναφέρετε την εμπειρία σας.

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

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