This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:abstract_classes_vs_interfaces [2015/03/02 07:16] gthanos |
java:abstract_classes_vs_interfaces [2017/02/16 15:05] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Συγκρίνοντας Abstract Κλάσεις και Interfaces ====== | ====== Συγκρίνοντας Abstract Κλάσεις και Interfaces ====== | ||
| - | Σε αυτή τη σελίδα συγκρίνουμε τις διαφορές Abstract Κλάσεων και Διεπαφών (Interfaces). Όπως έχουμε δει μέχρι τώρα μία κλάση μπορεί να υλοποιεί ένα Interface ή να κληρονομεί μία Abstract κλάση. Ποιες είναι οι διαφορές μεταξύ των δύο προσεγγίσεων; | + | Σε αυτή τη σελίδα συγκρίνουμε τις διαφορές Abstract Κλάσεων και Διεπαφών (Interfaces). Όπως έχουμε δει μέχρι τώρα μία κλάση μπορεί να υλοποιεί ένα Interface ή να κληρονομεί μία Abstract κλάση. Ποιες είναι όμως οι διαφορές μεταξύ των δύο προσεγγίσεων; |
| ^ Χαρακτηριστικό ^ Interface ^ Abstract Class ^ | ^ Χαρακτηριστικό ^ Interface ^ Abstract Class ^ | ||
| Line 11: | Line 11: | ||
| | **Χρήση** | Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά. | Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτιριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή. | | | **Χρήση** | Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά. | Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτιριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή. | | ||
| | **Ταχύτητα** | Λιγότερο ταχύ | Ταχύτερο | | | **Ταχύτητα** | Λιγότερο ταχύ | Ταχύτερο | | ||
| + | | **Επεκτασιμότητα** | Θεωρείται κακή προγραμματιστική πρακτική η επέκταση ενός Interface. Ένα Interface δεν θα πρέπει να σχεδιάζεται με γνώμονα την μελλοντική του επέκταση. | Μία abstract κλάση μπορεί να αλλάξει την υλοποίηση της και να επεκταθεί, αρκεί να περιέχει default υλοποιήσεις για τις νέες μεθόδους που ορίζει. | | ||
| + | |||
| + | |||
| + | |Προηγούμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:exceptions_intro | Εξαιρέσεις ]]| | ||