User Tools

Site Tools


java:abstract_classes_vs_interfaces

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:abstract_classes_vs_interfaces [2015/03/02 06:44] gthanosjava:abstract_classes_vs_interfaces [2020/02/26 20:45] (current) gthanos
Line 1: Line 1:
-====== Συγκρίνοντας Abstract Κλάσεις και Interfaces  ======+====== Σύγκριση Abstract Κλάσεων και Interfaces  ====== 
 + 
 +Σε αυτή τη σελίδα συγκρίνουμε τις διαφορές Abstract Κλάσεων και Διεπαφών (Interfaces). Όπως έχουμε δει μέχρι τώρα μία κλάση μπορεί να υλοποιεί ένα Interface ή να κληρονομεί μία Abstract κλάση. Ποιες είναι όμως οι διαφορές μεταξύ των δύο προσεγγίσεων;
  
 ^  Χαρακτηριστικό  ^  Interface  ^  Abstract Class  ^ ^  Χαρακτηριστικό  ^  Interface  ^  Abstract Class  ^
 | **Multiple Inheritance** | Μία κλάση μπορεί να κληρονομεί πολλαπλά interfaces | Μία κλάση μπορεί να κληρονομεί μόνο μία abstract κλάση | | **Multiple Inheritance** | Μία κλάση μπορεί να κληρονομεί πολλαπλά interfaces | Μία κλάση μπορεί να κληρονομεί μόνο μία abstract κλάση |
-| **Default implementation** | Στην Java 8 και μεταγενέστερα ένα interface μπορεί να παρέχει μία default υλοποίηση. Καθώς ένα interface δεν μπορεί να περιέχει πεδία, η πιθανή default υλοποίηση ενός interface θα πρέπει να είναι ανεξάρτητη των δεδομένων της κλάσης | Μία abstract κλάση μπορεί να παρέχει default υλοποίηση, η οποία όμως έχει πρόσβαση στα εσωτερικά δεδομένα της κλάσης |  +| **Default implementation** | Στην Java 8 και μεταγενέστερα ένα interface μπορεί να παρέχει μία default υλοποίηση. Καθώς ένα interface δεν μπορεί να περιέχει πεδία, η πιθανή default υλοποίηση ενός interface θα πρέπει να είναι ανεξάρτητη των πεδίων της κλάσης | Μία abstract κλάση μπορεί να παρέχει default υλοποίηση, η οποία όμως έχει πρόσβαση στα εσωτερικά δεδομένα της κλάσης |  
-| **Περιοριστές πρόσβασης** | Σε ένα interface όλες οι δηλώσεις θεωρούνται public | Μία abstract κλάση μπορεί να έχει επιμέρους προσδιοριστές πρόσβασης για τα πεδία και τις μεθόδους της, όπως public, protected, package-private, private. |+| **Πεδία** | Ένα Interface μπορεί να περιέχει μόνο σταθερές δηλ μεταβλητές που είναι static και final | Μία Abstract κλάση μπορεί να περιέχει static, static final και non-static (κανονικές) μεταβλητές | 
 +| **Περιοριστές πρόσβασης** | Σε ένα interface όλες οι δηλώσεις θεωρούνται //public// | Μία abstract κλάση μπορεί να έχει επιμέρους προσδιοριστές πρόσβασης για τα πεδία και τις μεθόδους της, όπως //public, protected, package-private, private//. |
 | **Λειτουργικότητα** | Ένα interface χρησιμοποιείται για να δηλώσει την εξωτερική διεπαφή μίας κλάσης με άλλες κλάσεις | Μία abstract κλάση μπορεί να δηλώσει τόσο της εξωτερική διεπαφή, όσο και λεπτομέρειες της εσωτερικής υλοποίησης | | **Λειτουργικότητα** | Ένα interface χρησιμοποιείται για να δηλώσει την εξωτερική διεπαφή μίας κλάσης με άλλες κλάσεις | Μία abstract κλάση μπορεί να δηλώσει τόσο της εξωτερική διεπαφή, όσο και λεπτομέρειες της εσωτερικής υλοποίησης |
 | **Χρήση** | Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά.  | Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτιριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή. | | **Χρήση** | Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά.  | Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτιριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή. |
 | **Ταχύτητα** | Λιγότερο ταχύ | Ταχύτερο |  | **Ταχύτητα** | Λιγότερο ταχύ | Ταχύτερο | 
 +| **Επεκτασιμότητα** | Θεωρείται κακή προγραμματιστική πρακτική η επέκταση ενός Interface. Ένα Interface δεν θα πρέπει να σχεδιάζεται με γνώμονα την μελλοντική του επέκταση. | Μία abstract κλάση μπορεί να αλλάξει την υλοποίηση της και να επεκταθεί. |
  
 +| Προηγούμενο : [[ :java:interface_as_data_type | Το interface ως τύπος δεδομένων ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:comparable | Συγκρίνοντας αντικείμενα μεταξύ τους]]  |
java/abstract_classes_vs_interfaces.1425278647.txt.gz · Last modified: 2015/03/02 06:44 (external edit)