java:inner_class_access_from_outside
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:inner_class_access_from_outside [2017/02/03 14:14] – gthanos | java:inner_class_access_from_outside [2018/03/21 07:40] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Πρόσβαση από | + | ====== Πρόσβαση από |
- | ===== Χρήση προσδιοριστών πρόσβασης | + | ===== Χρήση προσδιοριστών πρόσβασης |
- | Είδαμε ότι οι εξωτερικές κλάσεις μπορούν να έχουν τους προσδιοριστές πρόσβασης //public// και //package private// (κανένας προσδιοριστής). Για τις εσωτερικές κλάσεις | + | Είδαμε ότι οι εξωτερικές κλάσεις μπορούν να έχουν τους προσδιοριστές πρόσβασης //public// και //package private// (δηλ. |
- | Στο προηγούμενο παράδειγμα δοκιμάστε να αλλάξετε τον προσδιοριστή πρόσβασης της κλάσης **InnerClass** από package private σε private. Σε αυτή την περίπτωση θα παρατηρήσετε ότι η κλάση **TestOuterClass** δεν μεταγλωττίζεται. Συγκεκριμένα, | + | Η επεξήγηση των προσδιοριστών είναι ανάλογη με τους προσδιοριστές πρόσβασης |
- | < | + | - **public**: Η εσωτερική κλάση είναι ορατή από οποιαδήποτε άλλη κλάση. |
- | TestOuterClass.java:6: error: OuterClass.InnerOuterClass has private | + | - **protected**: Η εσωτερική κλάση είναι ορατή από οποιαδήποτε κλάση ανήκει στο ίδιο πακέτο με την εξωτερική της κλάση και από τις κλάσεις που κληρονομούν την εξωτερική της κλάση ακόμη και εάν αυτές ανήκουν σε διαφορετικά πακέτα. |
- | OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); | + | - **package-private** (κανένας προσδιοριστής πρόσβασης): Η εσωτερική κλάση είναι ορατή από κλάσεις που ανήκουν στο ίδιο πακέτο με την εξωτερική κλάση και ΔΕΝ είναι ορατή από κλάσεις ή υποκλάσεις που ανήκουν σε διαφορετικά πακέτα. |
- | ^ | + | - **private**: Τα μέλη της κλάσης είναι ορατά μόνο από την εξωτερική κλάση. |
- | TestOuterClass.java:6: error: OuterClass.InnerOuterClass has private | + | |
- | OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); | + | |
- | </ | + | |
- | <WRAP tip 80% center round> | + | ===== Πρόσβαση από άλλες κλάσεις στην εσωτερική κλάση ===== |
- | Το παραπάνω εξηγεί ικανοποιητικά τον τρόπο με τον οποίο μπορείτε να αποκλείσετε την πρόσβαση στην εσωτερική κλάση από άλλες κλάσεις πέραν της εξωτερικής. Ορίζοντας την εσωτερική κλάση ως **private** αυτή είναι προσβάσιμη μόνο από την εξωτερική της κλάση. | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ===== Πρόσβαση από άλλες κλάσεις σε πεδία | + | |
Ο παρακάτω κώδικας επιχειρεί να δημιουργήσει ένα αντικείμενο μίας εσωτερικής κλάσης από μία άλλη κλάση. Σε αυτή την περίπτωση και __με την προϋπόθεση ότι η εσωτερική κλάση είναι συνολικά προσβάσιμη__ από την κλάση που επιχειρεί να δημιουργήσει το αντικείμενο, | Ο παρακάτω κώδικας επιχειρεί να δημιουργήσει ένα αντικείμενο μίας εσωτερικής κλάσης από μία άλλη κλάση. Σε αυτή την περίπτωση και __με την προϋπόθεση ότι η εσωτερική κλάση είναι συνολικά προσβάσιμη__ από την κλάση που επιχειρεί να δημιουργήσει το αντικείμενο, | ||
Line 70: | Line 62: | ||
</ | </ | ||
+ | <WRAP tip 80% center round> | ||
Κατά συνέπεια, | Κατά συνέπεια, | ||
- Η εσωτερική κλάση θα πρέπει να είναι συνολικά προσβάσιμη. | - Η εσωτερική κλάση θα πρέπει να είναι συνολικά προσβάσιμη. | ||
- | - Με την προϋπόθεση ότι ισχύει το **1.**, ισχύουν οι [[java: | + | - Με την προϋπόθεση ότι ισχύει το παραπάνω, για τα πεδία και τις μεθόδους της εσωτερικής κλάσης |
+ | </ | ||
+ | Στο προηγούμενο παράδειγμα δοκιμάστε να αλλάξετε τον προσδιοριστή πρόσβασης της κλάσης **InnerClass** από //package private// σε // | ||
+ | |||
+ | < | ||
+ | TestOuterClass.java: | ||
+ | OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); | ||
+ | ^ | ||
+ | TestOuterClass.java: | ||
+ | OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); | ||
+ | </ | ||
+ | |||
+ | <WRAP tip 80% center round> | ||
+ | Το παραπάνω εξηγεί ικανοποιητικά τον τρόπο με τον οποίο μπορείτε να αποκλείσετε την πρόσβαση στην εσωτερική κλάση από άλλες κλάσεις πέραν της εξωτερικής. Ορίζοντας την εσωτερική κλάση ως **private** αυτή είναι προσβάσιμη μόνο από την εξωτερική της κλάση. | ||
+ | </ | ||
+ | | Προηγούμενο : [[ : |
java/inner_class_access_from_outside.1486131291.txt.gz · Last modified: 2017/02/03 14:14 (external edit)