Διαφορά μεταξύ Abstract Class και Interface in Java
Βασική διαφορά μεταξύ της Abstract Class και της Interface in Java
- Στο Interface, μια κλάση μπορεί να υλοποιήσει πολλαπλές διεπαφές, ενώ η κλάση μπορεί να κληρονομήσει μόνο μία Abstract Class.
- Στο Interface δεν υπάρχουν τροποποιητές πρόσβασης. Ό,τι ορίζεται μέσα στη διεπαφή θεωρείται ότι έχει έναν δημόσιο τροποποιητή, ενώ η Abstract Class μπορεί να έχει έναν τροποποιητή πρόσβασης.
- Η διεπαφή δεν μπορεί να περιέχει πεδία δεδομένων, ενώ η κλάση αφηρημένη μπορεί να έχει πεδία δεδομένων.
- Οι διεπαφές βοηθούν στον καθορισμό των περιφερειακών ικανοτήτων μιας κλάσης, ενώ μια αφηρημένη κλάση ορίζει την ταυτότητα μιας κλάσης.
Τι είναι μια Abstract Class;
Μια κλάση που έχει την αφηρημένη λέξη-κλειδί στη δήλωσή της ονομάζεται abstract class. Οι αφηρημένες κλάσεις πρέπει να έχουν μηδέν ή περισσότερες αφηρημένες μεθόδους. δηλαδή μεθόδους χωρίς σώμα. Μπορεί να έχει πολλαπλές συγκεκριμένες μεθόδους. Οι αφηρημένες τάξεις σάς επιτρέπουν να δημιουργείτε σχεδιαγράμματα για συγκεκριμένες τάξεις. Αλλά η κλάση κληρονομιάς θα πρέπει να εφαρμόσει την αφηρημένη μέθοδο. Οι αφηρημένες τάξεις δεν μπορούν να δημιουργηθούν.
Σημαντικοί λόγοι για τη χρήση διεπαφών
- Οι διεπαφές χρησιμοποιούνται για την επίτευξη αφαίρεση.
- Σχεδιασμένο για να υποστηρίζει δυναμική ανάλυση μεθόδου κατά το χρόνο εκτέλεσης
- Σας βοηθά να επιτύχετε χαλαρή σύζευξη.
- Σας επιτρέπει να διαχωρίσετε τον ορισμό μιας μεθόδου από την ιεραρχία κληρονομικότητας
Σημαντικοί λόγοι για τη χρήση της τάξης Abstract
- Οι αφηρημένες κλάσεις προσφέρουν προεπιλεγμένη λειτουργικότητα για τις υποκλάσεις.
- Παρέχει ένα πρότυπο για μελλοντικές συγκεκριμένες τάξεις
- Σας βοηθά να ορίσετε μια κοινή διεπαφή για τις υποκατηγορίες του
- Η Abstract class επιτρέπει την επαναχρησιμοποίηση κώδικα.
Τι είναι η διεπαφή;
Η διεπαφή είναι ένα προσχέδιο που μπορεί να χρησιμοποιηθεί για την υλοποίηση μιας κλάσης. Η διεπαφή δεν περιέχει συγκεκριμένες μεθόδους (μέθοδοι που έχουν κώδικα). Όλες οι μέθοδοι μιας διεπαφής είναι αφηρημένες μέθοδοι. Δεν είναι δυνατή η δημιουργία μιας διεπαφής. Ωστόσο, κλάσεις που υλοποιούν διεπαφές μπορούν να δημιουργηθούν. Οι διεπαφές δεν περιέχουν ποτέ μεταβλητές στιγμιότυπου, αλλά μπορούν να περιέχουν δημόσιες στατικές τελικές μεταβλητές (δηλαδή μεταβλητές σταθερής κλάσης)
Διαφορά μεταξύ διεπαφής και αφηρημένης κλάσης σε Java
Μια αφηρημένη κλάση σάς επιτρέπει να δημιουργήσετε λειτουργίες που οι υποκλάσεις μπορούν να υλοποιήσουν ή να παρακάμψουν, ενώ μια διεπαφή σας επιτρέπει μόνο να δηλώσετε τη λειτουργικότητα αλλά όχι να την εφαρμόσετε. Μια κλάση μπορεί να επεκτείνει μόνο μια αφηρημένη κλάση ενώ μια κλάση μπορεί να υλοποιήσει πολλαπλές διεπαφές.
παράμετροι | περιβάλλον λειτουργίας | Περίληψη τάξη |
---|---|---|
Ταχύτητα | Αργά | Γρήγορα |
Πολλαπλές κληρονομιές | Εφαρμογή πολλών διεπαφών | Μόνο μια αφηρημένη τάξη |
Structure | Αφηρημένες μέθοδοι | Αφηρημένες & συγκεκριμένες μέθοδοι |
Πότε να χρησιμοποιήσετε | Μελλοντική βελτίωση | Για να αποφύγει την ανεξαρτησία |
Κληρονομικότητα/ Υλοποίηση | Μια κλάση μπορεί να υλοποιήσει πολλαπλές διεπαφές | Η κλάση μπορεί να κληρονομήσει μόνο μία Abstract Class |
Προεπιλεγμένη υλοποίηση | Ενώ προσθέτετε νέα πράγματα στη διεπαφή, είναι εφιάλτης να βρείτε όλους τους υλοποιητές και να εφαρμόσετε πρόσφατα καθορισμένα πράγματα. | Στην περίπτωση της Abstract Class, μπορείτε να επωφεληθείτε από την προεπιλεγμένη υλοποίηση. |
Τροποποιητές πρόσβασης | Η διεπαφή δεν έχει τροποποιητές πρόσβασης. Ό,τι ορίζεται μέσα στη διεπαφή θεωρείται ως δημόσιος τροποποιητής. | Η Abstract Class μπορεί να έχει έναν τροποποιητή πρόσβασης. |
Πότε να χρησιμοποιήσετε | Είναι καλύτερα να χρησιμοποιείτε τη διεπαφή όταν διάφορες υλοποιήσεις μοιράζονται μόνο υπογραφή μεθόδου. Πολυμορφική ιεραρχία τύπων αξίας. | Θα πρέπει να χρησιμοποιείται όταν διάφορες υλοποιήσεις του ίδιου είδους έχουν κοινή συμπεριφορά. |
Πεδία δεδομένων | η διεπαφή δεν μπορεί να περιέχει πεδία δεδομένων. | η κλάση μπορεί να έχει πεδία δεδομένων. |
Προεπιλογή πολλαπλής κληρονομιάς | Μια κλάση μπορεί να υλοποιήσει πολλές διεπαφές. | Μια κλάση κληρονομεί μόνο μια αφηρημένη κλάση. |
Εκτέλεση | Μια διεπαφή είναι αφηρημένη έτσι ώστε να μην μπορεί να παρέχει κανέναν κώδικα. | Μια αφηρημένη κλάση μπορεί να δώσει πλήρη, προεπιλεγμένο κώδικα που θα πρέπει να παρακαμφθεί. |
Χρήση τροποποιητών Access | Δεν μπορείτε να χρησιμοποιήσετε τροποποιητές πρόσβασης για τη μέθοδο, τις ιδιότητες κ.λπ. | Μπορείτε να χρησιμοποιήσετε μια αφηρημένη κλάση που περιέχει τροποποιητές πρόσβασης. |
Χρήση | Οι διεπαφές βοηθούν στον καθορισμό των περιφερειακών ικανοτήτων μιας κλάσης. | Μια αφηρημένη κλάση ορίζει την ταυτότητα μιας κλάσης. |
Καθορισμένα πεδία | Δεν μπορούν να οριστούν πεδία | Μια αφηρημένη κλάση σας επιτρέπει να ορίσετε τόσο πεδία όσο και σταθερές |
Κληρονομία | Μια διεπαφή μπορεί να κληρονομήσει πολλαπλές διεπαφές, αλλά δεν μπορεί να κληρονομήσει μια κλάση. | Μια αφηρημένη κλάση μπορεί να κληρονομήσει μια κλάση και πολλές διεπαφές. |
Κατασκευαστής ή καταστροφείς | Μια διεπαφή δεν μπορεί να δηλώσει κατασκευαστές ή καταστροφείς. | Μια αφηρημένη κλάση μπορεί να δηλώσει κατασκευαστές και καταστροφείς. |
Όριο επεκτάσεων | Μπορεί να επεκτείνει οποιονδήποτε αριθμό διεπαφών. | Μπορεί να επεκτείνει μόνο μία τάξη ή μία αφηρημένη τάξη κάθε φορά. |
Αφηρημένη λέξη-κλειδί | Σε μια λέξη-κλειδί αφηρημένης διεπαφής, είναι προαιρετική για τη δήλωση μιας μεθόδου ως περίληψης. | Σε μια κλάση αφηρημένη, η λέξη-κλειδί αφηρημένη είναι υποχρεωτική για τη δήλωση μιας μεθόδου ως αφηρημένης. |
Τύπος τάξης | Μια διεπαφή μπορεί να έχει μόνο δημόσιες αφηρημένες μεθόδους. | Μια αφηρημένη κλάση έχει προστατευμένες και δημόσιες αφηρημένες μεθόδους. |
Δείγμα κώδικα για το Interface and Abstract Class in Java
Ακολουθεί δείγμα κώδικα για τη δημιουργία διεπαφής και αφηρημένης κλάσης Java
Σύνταξη διεπαφής
interface name{ //methods }
Java Παράδειγμα διεπαφής:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
Αφηρημένη Σύνταξη Τάξης
abstract class name{ // code }
Παράδειγμα αφηρημένης τάξης:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }