This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:abstract_classes_vs_interfaces [2016/03/31 08:48] doufexi |
java:abstract_classes_vs_interfaces [2019/04/05 17:34] (current) gthanos |
||
---|---|---|---|
Line 9: | Line 9: | ||
| **Περιοριστές πρόσβασης** | Σε ένα interface όλες οι δηλώσεις θεωρούνται //public// | Μία abstract κλάση μπορεί να έχει επιμέρους προσδιοριστές πρόσβασης για τα πεδία και τις μεθόδους της, όπως //public, protected, package-private, private//. | | | **Περιοριστές πρόσβασης** | Σε ένα interface όλες οι δηλώσεις θεωρούνται //public// | Μία abstract κλάση μπορεί να έχει επιμέρους προσδιοριστές πρόσβασης για τα πεδία και τις μεθόδους της, όπως //public, protected, package-private, private//. | | ||
| **Λειτουργικότητα** | Ένα interface χρησιμοποιείται για να δηλώσει την εξωτερική διεπαφή μίας κλάσης με άλλες κλάσεις | Μία abstract κλάση μπορεί να δηλώσει τόσο της εξωτερική διεπαφή, όσο και λεπτομέρειες της εσωτερικής υλοποίησης | | | **Λειτουργικότητα** | Ένα interface χρησιμοποιείται για να δηλώσει την εξωτερική διεπαφή μίας κλάσης με άλλες κλάσεις | Μία abstract κλάση μπορεί να δηλώσει τόσο της εξωτερική διεπαφή, όσο και λεπτομέρειες της εσωτερικής υλοποίησης | | ||
- | | **Χρήση** | Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά. | Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτιριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή. | | + | | **Χρήση** | Εάν διαφορετικές υλοποιήσεις κλάσεων χρησιμοποιούν τις ίδιες μεθόδους για την διεπαφή τους με άλλες κλάσεις τότε ένα interface θεωρείται κατάλληλο για να δηλώσει τα κοινά τους χαρακτηριστικά. | Εάν διαφορετικές υλοποιήσεις κλάσεων έχουν κοινά χαρακτηριστικά που αφορούν την εσωτερική τους κατάσταση (π.χ. κοινές μεταβλητές) τότε η χρήση μίας abstract κλάσης ως κοινός πρόγονος είναι η σωστότερη επιλογή. | |
| **Ταχύτητα** | Λιγότερο ταχύ | Ταχύτερο | | | **Ταχύτητα** | Λιγότερο ταχύ | Ταχύτερο | | ||
| **Επεκτασιμότητα** | Θεωρείται κακή προγραμματιστική πρακτική η επέκταση ενός Interface. Ένα Interface δεν θα πρέπει να σχεδιάζεται με γνώμονα την μελλοντική του επέκταση. | Μία abstract κλάση μπορεί να αλλάξει την υλοποίηση της και να επεκταθεί, αρκεί να περιέχει default υλοποιήσεις για τις νέες μεθόδους που ορίζει. | | | **Επεκτασιμότητα** | Θεωρείται κακή προγραμματιστική πρακτική η επέκταση ενός Interface. Ένα Interface δεν θα πρέπει να σχεδιάζεται με γνώμονα την μελλοντική του επέκταση. | Μία abstract κλάση μπορεί να αλλάξει την υλοποίηση της και να επεκταθεί, αρκεί να περιέχει default υλοποιήσεις για τις νέες μεθόδους που ορίζει. | | ||
- | |Προηγούμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:nested_classes | Εμφωλευμένες κλάσεις (Nested Classes) ]]| | + | |Προηγούμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:instanceof| Τελεστής instanceof ]]| |