This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
java:access_modifiers [2015/02/05 16:33] gthanos [Προσδιοριστές Πρόσβασης στο επίπεδο της των μελών της κλάσης] |
java:access_modifiers [2016/02/29 10:07] doufexi added entry for private class, nav links |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Ελέγχοντας την πρόσβαση άλλων κλάσεων σε μέλη της κλάσης - Περιοριστές πρόσβασης ====== | + | ====== Περιοριστές πρόσβασης - Ελέγχοντας την πρόσβαση άλλων κλάσεων στα μέλη της κλάσης ====== |
- | Προηγουμένως είδαμε την [[java:jar_files#Διάκριση μεταξύ πεδίων με τον προσδιοριστή πρόσβασης public και private | διάκριση μεταξύ πεδίων με βάση τον προσδιοριστή πρόσβασης **public** και **private**. Σε αυτή την ενότητα θα δούμε συνολικά την χρήση των προσδιοριστών πρόσβασης. | + | Προηγουμένως είδαμε την [[java:class_fields#Διάκριση μεταξύ πεδίων με τον προσδιοριστή πρόσβασης public και private | διάκριση μεταξύ πεδίων με βάση τον προσδιοριστή πρόσβασης **public** και **private**]]. Σε αυτή την ενότητα θα δούμε συνολικά την χρήση των προσδιοριστών πρόσβασης. |
Οι προσδιοριστές πρόσβασης εφαρμόζονται στα παρακάτω δύο επίπεδα, τα οποία θα δούμε στη συνέχεια αναλυτικά. | Οι προσδιοριστές πρόσβασης εφαρμόζονται στα παρακάτω δύο επίπεδα, τα οποία θα δούμε στη συνέχεια αναλυτικά. | ||
Line 9: | Line 9: | ||
===== Προσδιοριστές Πρόσβασης στο επίπεδο της κλάσης ===== | ===== Προσδιοριστές Πρόσβασης στο επίπεδο της κλάσης ===== | ||
- | Όσον αφορά το επίπεδο της κλάσης οι περιοριστές πρόσβασης έχουν δύο τιμές | + | Όσον αφορά το επίπεδο της κλάσης οι προσδιοριστές πρόσβασης έχουν τρεις δυνατές τιμές |
- **public**: Η κλάση είναι ορατή από οποιαδήποτε άλλη κλάση στο ίδιο ή σε άλλο πακέτο. | - **public**: Η κλάση είναι ορατή από οποιαδήποτε άλλη κλάση στο ίδιο ή σε άλλο πακέτο. | ||
- **package-private** (κανένας προσδιοριστής πρόσβασης): Σε αυτή την περίπτωση η κλάση είναι ορατή μόνο από κλάσεις που ανήκουν στο ίδιο πακέτο με την υφιστάμενη κλάση. | - **package-private** (κανένας προσδιοριστής πρόσβασης): Σε αυτή την περίπτωση η κλάση είναι ορατή μόνο από κλάσεις που ανήκουν στο ίδιο πακέτο με την υφιστάμενη κλάση. | ||
+ | - **private**: Μόνο για [[ :java:inner_classes | εσωτερικές κλάσεις ]]. Η κλάση είναι ορατή μόνο από την κλάση στην οποία περικλείεται. | ||
===== Προσδιοριστές Πρόσβασης στο επίπεδο της των μελών της κλάσης ===== | ===== Προσδιοριστές Πρόσβασης στο επίπεδο της των μελών της κλάσης ===== | ||
Όσον αφορά το επίπεδο των μελών της κλάσης εδώ έχουμε 4 επιλογές: | Όσον αφορά το επίπεδο των μελών της κλάσης εδώ έχουμε 4 επιλογές: | ||
- **public**: Τα μέλη της κλάσης είναι ορατά από οποιαδήποτε άλλη κλάση στο ίδιο ή σε άλλο πακέτο. | - **public**: Τα μέλη της κλάσης είναι ορατά από οποιαδήποτε άλλη κλάση στο ίδιο ή σε άλλο πακέτο. | ||
- | - **protected**: Τα μέλη της κλάσης είναι ορατά μόνο από κλάσεις που ανήκουν στο ίδιο πακέτο με την υφιστάμενη κλάση. | + | - **protected**: Τα μέλη της κλάσης είναι ορατά μόνο από κλάσεις που ανήκουν στο ίδιο πακέτο με την υφιστάμενη κλάση ή από υποκλάσεις της υφιστάμενης κλάσης που ανήκουν σε άλλα πακέτα. |
- | - **package-private** (κανένας προσδιοριστής πρόσβασης): Τα μέλη της κλάσης είναι ορατά μόνο από κλάσεις που ανήκουν στο ίδιο πακέτο με την υφιστάμενη κλάση ή από υποκλάσεις της υφιστάμενης κλάσης που ανήκουν σε άλλα πακέτα. | + | - **package-private** (κανένας προσδιοριστής πρόσβασης): Τα μέλη της κλάσης είναι ορατά μόνο από κλάσεις που ανήκουν στο ίδιο πακέτο με την υφιστάμενη κλάση. |
- **private**: Τα μέλη της κλάσης είναι ορατά μόνο από την συγκεκριμένη κλάση. | - **private**: Τα μέλη της κλάσης είναι ορατά μόνο από την συγκεκριμένη κλάση. | ||
Line 31: | Line 31: | ||
* Η πρώτη στήλη του πίνακα δείχνει αν η ίδια η κλάση έχει πρόσβαση στα μέλη της. Αυτό ισχύει σε όλες τις περιπτώσεις. | * Η πρώτη στήλη του πίνακα δείχνει αν η ίδια η κλάση έχει πρόσβαση στα μέλη της. Αυτό ισχύει σε όλες τις περιπτώσεις. | ||
* Η δεύτερη στήλη δείχνει αν μία κλάση που ανήκει στο ίδιο πακέτο με την εξεταζόμενη κλάση έχει πρόσβαση στα μέλη της κλάσης. | * Η δεύτερη στήλη δείχνει αν μία κλάση που ανήκει στο ίδιο πακέτο με την εξεταζόμενη κλάση έχει πρόσβαση στα μέλη της κλάσης. | ||
- | * Η τρίτη στήλη δείχνει αν μία υποκλάση της εξεταζόμενης κλάσης που βρίσκεται σε άλλο σε άλλο πακέτο έχει πρόσβαση στα μέλη της κλάσης. | + | * Η τρίτη στήλη δείχνει αν μία υποκλάση της εξεταζόμενης κλάσης που βρίσκεται σε άλλο πακέτο έχει πρόσβαση στα μέλη της κλάσης. |
* Η τέταρτη στήλη δείχνει αν μία κλάση που ανήκει σε άλλο πακέτο έχει πρόσβαση στα μέλη της κλάσης. | * Η τέταρτη στήλη δείχνει αν μία κλάση που ανήκει σε άλλο πακέτο έχει πρόσβαση στα μέλη της κλάσης. | ||
Line 45: | Line 45: | ||
| ''private'' | Ναι | Όχι | Όχι | Όχι | | | ''private'' | Ναι | Όχι | Όχι | Όχι | | ||
+ | Μπορείτε να κατεβάσετε τον κώδικα που υλοποιεί το παραπάνω σχήμα κλάσεων και περιοριστών πρόσβασης {{:java:access-modifiers.tgz}}. Προσπαθήστε να μεταγλωττίσετε ως εξής: | ||
+ | <code> | ||
+ | cd package_one | ||
+ | javac ClassA.java | ||
+ | javac ClassB.java -cp ../ | ||
+ | cd package_two | ||
+ | javac SubClassA.java -cp ../ | ||
+ | javac ClassC.java -cp ../ | ||
+ | </code> | ||
+ | Παρατηρήστε τα λάθη αναφορικά με τους προσδιοριστές πρόσβασης που σας βγάζει ο compiler. | ||
- | + | | Προηγούμενο: [[ :java:interfaces | Διεπαφές ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:inheritance | Κληρονομικότητα]] | | |