java:access_modifiers

Differences

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

Link to this comparison view

Next revision
Previous revision
java:access_modifiers [2015/02/05 16:22]
gthanos created
java:access_modifiers [2017/02/16 14:37] (current)
gthanos [Προσδιοριστές Πρόσβασης στο επίπεδο της των μελών της κλάσης]
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 29: Line 29:
 | ''​private'' ​ | Ναι | Όχι | Όχι | Όχι | | ''​private'' ​ | Ναι | Όχι | Όχι | Όχι |
  
 +  * Η πρώτη στήλη του πίνακα δείχνει αν η ίδια η κλάση έχει πρόσβαση στα μέλη της. Αυτό ισχύει σε όλες τις περιπτώσεις. ​
 +  * Η δεύτερη στήλη δείχνει αν μία κλάση που ανήκει στο ίδιο πακέτο με την εξεταζόμενη κλάση έχει πρόσβαση στα μέλη της κλάσης.
 +  * Η τρίτη στήλη δείχνει αν μία υποκλάση της εξεταζόμενης κλάσης που βρίσκεται σε άλλο πακέτο έχει πρόσβαση στα μέλη της κλάσης.
 +  * Η τέταρτη στήλη δείχνει αν μία κλάση που ανήκει σε άλλο πακέτο έχει πρόσβαση στα μέλη της κλάσης.
 +
 +Στην παρακάτω εικόνα δίνεται το παράδειγμα τεσσάρων κλάσεων που ανήκουν σε δύο διαφορετικά πακέτα ''​Package One''​ και ''​Package Two''​. Στον πίνακα που ακολουθεί μπορείτε να δείτε την προσβασιμότητα των μελών της κλάσης ''​Alpha''​ για κάθε μία τις τέσσερις κατηγορίες που αναφέρονται παραπάνω.
 +
 +
 +{{ :​java:​classes-access.gif?​350 |}}
 +
 +^ Προσδ.Πρόσβασης ^ Alpha ^ Beta ^ SubAlpha ^ Gamma ^
 +| ''​public'' ​ | Ναι | Ναι | Ναι | Ναι |
 +| ''​protected'' ​ | Ναι | Ναι | Ναι | Όχι |
 +| κανένας προσδιοριστής ​ | Ναι | Ναι | Όχι | Όχι |
 +| ''​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:​packages:​using ​ | Χρήση κλάσεων από άλλες κλάσεις ]]  | [[ :toc | Περιεχόμενα ]] | Επόμενο:​ [[ :​java:​inheritance | Κληρονομικότητα]] |
  
  
java/access_modifiers.1423153345.txt.gz · Last modified: 2016/02/26 11:15 (external edit)