Abstract Class vs Interface στην Java – Διαφορά μεταξύ τους

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

  • Στο Interface, μια κλάση μπορεί να υλοποιήσει πολλαπλές διεπαφές, ενώ η κλάση μπορεί να κληρονομήσει μόνο μία Abstract Class.
  • Στο Interface δεν υπάρχουν τροποποιητές πρόσβασης. Ό,τι ορίζεται μέσα στη διεπαφή θεωρείται ότι έχει έναν δημόσιο τροποποιητή, ενώ η Abstract Class μπορεί να έχει έναν τροποποιητή πρόσβασης.
  • Η διεπαφή δεν μπορεί να περιέχει πεδία δεδομένων, ενώ η κλάση αφηρημένη μπορεί να έχει πεδία δεδομένων.
  • Οι διεπαφές βοηθούν στον καθορισμό των περιφερειακών ικανοτήτων μιας κλάσης, ενώ μια αφηρημένη κλάση ορίζει την ταυτότητα μιας κλάσης.

Interface vs Abstract Class σε Java

Τι είναι το Abstract Class;

Μια κλάση που έχει την αφηρημένη λέξη-κλειδί στη δήλωσή της ονομάζεται abstract class. Οι αφηρημένες κλάσεις πρέπει να έχουν μηδέν ή περισσότερες αφηρημένες μεθόδους. δηλαδή μεθόδους χωρίς σώμα. Μπορεί να έχει πολλαπλές συγκεκριμένες μεθόδους.

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

Οι αφηρημένες τάξεις δεν μπορούν να δημιουργηθούν.

Σημαντικοί λόγοι για τη χρήση διεπαφών

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

Σημαντικοί λόγοι για τη χρήση της τάξης Abstract

  • Οι αφηρημένες κλάσεις προσφέρουν προεπιλεγμένη λειτουργικότητα για τις υποκλάσεις.
  • Παρέχει ένα πρότυπο για μελλοντικές συγκεκριμένες τάξεις
  • Σας βοηθά να ορίσετε μια κοινή διεπαφή για τις υποκατηγορίες του
  • Η Abstract class επιτρέπει την επαναχρησιμοποίηση κώδικα.

Τι είναι το Interface;

Η διεπαφή είναι ένα προσχέδιο που μπορεί να χρησιμοποιηθεί για την υλοποίηση μιας κλάσης. Η διεπαφή δεν περιέχει συγκεκριμένες μεθόδους (μέθοδοι που έχουν κώδικα). Όλες οι μέθοδοι μιας διεπαφής είναι αφηρημένες μέθοδοι.

Δεν είναι δυνατή η δημιουργία μιας διεπαφής. Ωστόσο, κλάσεις που υλοποιούν διεπαφές μπορούν να δημιουργηθούν. Οι διεπαφές δεν περιέχουν ποτέ μεταβλητές στιγμιότυπου, αλλά μπορούν να περιέχουν δημόσιες στατικές τελικές μεταβλητές (δηλ. μεταβλητές σταθερής κλάσης)

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

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

παράμετροι περιβάλλον λειτουργίας Περίληψη τάξη
Ταχύτητα Αργά Γρήγορα
Πολλαπλές κληρονομιές Εφαρμογή πολλών διεπαφών Μόνο μια αφηρημένη τάξη
Structure Αφηρημένες μέθοδοι Αφηρημένες & συγκεκριμένες μέθοδοι
Πότε να χρησιμοποιήσετε Μελλοντική βελτίωση Για να αποφύγει την ανεξαρτησία
Κληρονομικότητα/ Υλοποίηση Μια κλάση μπορεί να υλοποιήσει πολλαπλές διεπαφές Η κλάση μπορεί να κληρονομήσει μόνο μία Abstract Class
Προεπιλεγμένη υλοποίηση Ενώ προσθέτετε νέα πράγματα στη διεπαφή, είναι εφιάλτης να βρείτε όλους τους υλοποιητές και να εφαρμόσετε πρόσφατα καθορισμένα πράγματα. Στην περίπτωση της Abstract Class, μπορείτε να επωφεληθείτε από την προεπιλεγμένη υλοποίηση.
Τροποποιητές πρόσβασης Η διεπαφή δεν έχει τροποποιητές πρόσβασης. Ό,τι ορίζεται μέσα στη διεπαφή θεωρείται ως δημόσιος τροποποιητής. Η Abstract Class μπορεί να έχει έναν τροποποιητή πρόσβασης.
Πότε να χρησιμοποιήσετε Είναι καλύτερα να χρησιμοποιείτε τη διεπαφή όταν διάφορες υλοποιήσεις μοιράζονται μόνο υπογραφή μεθόδου. Πολυμορφική ιεραρχία τύπων αξίας. Θα πρέπει να χρησιμοποιείται όταν διάφορες υλοποιήσεις του ίδιου είδους έχουν κοινή συμπεριφορά.
Πεδία δεδομένων η διεπαφή δεν μπορεί να περιέχει πεδία δεδομένων. η κλάση μπορεί να έχει πεδία δεδομένων.
Προεπιλογή πολλαπλής κληρονομιάς Μια κλάση μπορεί να υλοποιήσει πολλές διεπαφές. Μια κλάση κληρονομεί μόνο μια αφηρημένη κλάση.
Εκτέλεση Μια διεπαφή είναι αφηρημένη έτσι ώστε να μην μπορεί να παρέχει κανέναν κώδικα. Μια αφηρημένη κλάση μπορεί να δώσει πλήρη, προεπιλεγμένο κώδικα που θα πρέπει να παρακαμφθεί.
Χρήση τροποποιητών Access Δεν μπορείτε να χρησιμοποιήσετε τροποποιητές πρόσβασης για τη μέθοδο, τις ιδιότητες κ.λπ. Μπορείτε να χρησιμοποιήσετε μια αφηρημένη κλάση που περιέχει τροποποιητές πρόσβασης.
Χρήση Οι διεπαφές βοηθούν στον καθορισμό των περιφερειακών ικανοτήτων μιας κλάσης. Μια αφηρημένη κλάση ορίζει την ταυτότητα μιας κλάσης.
Καθορισμένα πεδία Δεν μπορούν να οριστούν πεδία Μια αφηρημένη κλάση σας επιτρέπει να ορίσετε τόσο πεδία όσο και σταθερές
Κληρονομία Μια διεπαφή μπορεί να κληρονομήσει πολλαπλές διεπαφές, αλλά δεν μπορεί να κληρονομήσει μια κλάση. Μια αφηρημένη κλάση μπορεί να κληρονομήσει μια κλάση και πολλές διεπαφές.
Κατασκευαστής ή καταστροφείς Μια διεπαφή δεν μπορεί να δηλώσει κατασκευαστές ή καταστροφείς. Μια αφηρημένη κλάση μπορεί να δηλώσει κατασκευαστές και καταστροφείς.
Όριο επεκτάσεων Μπορεί να επεκτείνει οποιονδήποτε αριθμό διεπαφών. Μπορεί να επεκτείνει μόνο μία τάξη ή μία αφηρημένη τάξη κάθε φορά.
Αφηρημένη λέξη-κλειδί Σε μια λέξη-κλειδί αφηρημένης διεπαφής, είναι προαιρετική για τη δήλωση μιας μεθόδου ως περίληψης. Σε μια κλάση αφηρημένη, η λέξη-κλειδί αφηρημένη είναι υποχρεωτική για τη δήλωση μιας μεθόδου ως αφηρημένης.
Τύπος τάξης Μια διεπαφή μπορεί να έχει μόνο δημόσιες αφηρημένες μεθόδους. Μια αφηρημένη κλάση έχει προστατευμένες και δημόσιες αφηρημένες μεθόδους.

Δείγμα κώδικα για Interface και Abstract Class σε Java

Following είναι δείγμα κώδικα για τη δημιουργία μιας διεπαφής και μιας αφηρημένης κλάσης στην 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));
    }
}