This shows you the differences between two versions of the page.
|
java:inner_class_access_from_outside [2018/03/21 07:38] gthanos [Πρόσβαση από άλλες κλάσεις στην εσωτερική κλάση] |
java:inner_class_access_from_outside [2018/03/21 07:40] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Πρόσβαση από τρίτες κλάσεις σε πεδία και μεθόδους της εσωτερικής κλάσης ====== | ||
| - | |||
| - | |||
| - | ===== Χρήση προσδιοριστών πρόσβασης για την εσωτερική κλάση ===== | ||
| - | |||
| - | Είδαμε ότι οι εξωτερικές κλάσεις μπορούν να έχουν τους προσδιοριστές πρόσβασης //public// και //package private// (δηλ. κανένας προσδιοριστής). Για τις εσωτερικές κλάσεις υφίσταται οι επιλογές //public//, // | ||
| - | |||
| - | Η επεξήγηση των προσδιοριστών είναι ανάλογη με τους προσδιοριστές πρόσβασης για τα πεδία και τις μεθόδους μίας εξωτερικής κλάσης και έχει ως εξής: | ||
| - | |||
| - | - **public**: Η εσωτερική κλάση είναι ορατή από οποιαδήποτε άλλη κλάση. | ||
| - | - **protected**: | ||
| - | - **package-private** (κανένας προσδιοριστής πρόσβασης): | ||
| - | - **private**: | ||
| - | |||
| - | ===== Πρόσβαση από άλλες κλάσεις στην εσωτερική κλάση ===== | ||
| - | |||
| - | Ο παρακάτω κώδικας επιχειρεί να δημιουργήσει ένα αντικείμενο μίας εσωτερικής κλάσης από μία άλλη κλάση. Σε αυτή την περίπτωση και __με την προϋπόθεση ότι η εσωτερική κλάση είναι συνολικά προσβάσιμη__ από την κλάση που επιχειρεί να δημιουργήσει το αντικείμενο, | ||
| - | |||
| - | <code java OuterClass.java> | ||
| - | public class OuterClass { | ||
| - | int outer; | ||
| - | InnerClass innerObj; | ||
| - | |||
| - | public OuterClass(int o) { | ||
| - | outer = o; | ||
| - | innerObj = new InnerClass(); | ||
| - | innerObj.innerPriv = 10; | ||
| - | innerObj.innerProt = 20; | ||
| - | innerObj.innerPub = 30; | ||
| - | System.out.println(innerObj); | ||
| - | } | ||
| - | |||
| - | class InnerClass { | ||
| - | private int innerPriv; | ||
| - | protected int innerProt; | ||
| - | public int innerPub; | ||
| - | | ||
| - | private void setInnerPriv(int priv) { innerPriv = priv; } | ||
| - | protected void setInnerProt(int prot) { innerProt = prot; } | ||
| - | public void setInnerPub(int pub) { innerPub = pub; } | ||
| - | public String toString() { | ||
| - | return " | ||
| - | ", | ||
| - | } | ||
| - | } | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <code java TestOuterClass.java> | ||
| - | public class TestOuterClass { | ||
| - | public static void main(String args[]) { | ||
| - | OuterClass outer = new OuterClass(5); | ||
| - | OuterClass.InnerClass inner = outer.new InnerClass(); | ||
| - | inner.setInnerPriv(4); | ||
| - | inner.setInnerProt(5); | ||
| - | inner.setInnerPub(6); | ||
| - | System.out.println(inner); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Κατά συνέπεια, | ||
| - | - Η εσωτερική κλάση θα πρέπει να είναι συνολικά προσβάσιμη. | ||
| - | - Με την προϋπόθεση ότι ισχύει το παραπάνω, | ||
| - | |||
| - | Στο προηγούμενο παράδειγμα δοκιμάστε να αλλάξετε τον προσδιοριστή πρόσβασης της κλάσης **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** αυτή είναι προσβάσιμη μόνο από την εξωτερική της κλάση. | ||
| - | </ | ||
| - | |||
| - | | Προηγούμενο : [[ : | ||