User Tools

Site Tools


java:abstract_classes_vs_interfaces

This is an old revision of the document!


Συγκρίνοντας Abstract Κλάσεις και Interfaces

Σε αυτή τη σελίδα συγκρίνουμε τις διαφορές Abstract Κλάσεων και Διεπαφών (Interfaces). Όπως έχουμε δει μέχρι τώρα μία κλάση μπορεί να υλοποιεί ένα Interface ή να κληρονομεί μία Abstract κλάση. Ποιες είναι οι διαφορές μεταξύ των δύο προσεγγίσεων;

Χαρακτηριστικό Interface Abstract Class
Multiple Inheritance Μία κλάση μπορεί να κληρονομεί πολλαπλά interfaces Μία κλάση μπορεί να κληρονομεί μόνο μία abstract κλάση
Default implementation Στην Java 8 και μεταγενέστερα ένα interface μπορεί να παρέχει μία default υλοποίηση. Καθώς ένα interface δεν μπορεί να περιέχει πεδία, η πιθανή default υλοποίηση ενός interface θα πρέπει να είναι ανεξάρτητη των δεδομένων της κλάσης Μία abstract κλάση μπορεί να παρέχει default υλοποίηση, η οποία όμως έχει πρόσβαση στα εσωτερικά δεδομένα της κλάσης
Περιοριστές πρόσβασης Σε ένα interface όλες οι δηλώσεις θεωρούνται public Μία abstract κλάση μπορεί να έχει επιμέρους προσδιοριστές πρόσβασης για τα πεδία και τις μεθόδους της, όπως public, protected, package-private, private.
Λειτουργικότητα Ένα interface χρησιμοποιείται για να δηλώσει την εξωτερική διεπαφή μίας κλάσης με άλλες κλάσεις Μία abstract κλάση μπορεί να δηλώσει τόσο της εξωτερική διεπαφή, όσο και λεπτομέρειες της εσωτερικής υλοποίησης
Χρήση Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά. Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτιριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή.
Ταχύτητα Λιγότερο ταχύ Ταχύτερο
java/abstract_classes_vs_interfaces.1425279452.txt.gz · Last modified: 2015/03/02 06:57 by gthanos