java:access_modifiers

Differences

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

Link to this comparison view

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