java:inner_class_access
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| java:inner_class_access [2017/02/03 13:59] – gthanos | java:inner_class_access [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Προσβασιμότητα πεδίων και μεθόδων μεταξύ εσωτερικής και εξωτερικής κλάσης ====== | ====== Προσβασιμότητα πεδίων και μεθόδων μεταξύ εσωτερικής και εξωτερικής κλάσης ====== | ||
| - | |||
| ===== Πρόσβαση στα πεδία της εξωτερικής κλάσης (από την εσωτερική κλάση) ===== | ===== Πρόσβαση στα πεδία της εξωτερικής κλάσης (από την εσωτερική κλάση) ===== | ||
| Line 14: | Line 13: | ||
| Δείτε το παρακάτω παράδειγμα προσβασιμότητας των πεδίων της εξωτερικής κλάσης από την εσωτερική κλάση: | Δείτε το παρακάτω παράδειγμα προσβασιμότητας των πεδίων της εξωτερικής κλάσης από την εσωτερική κλάση: | ||
| - | <code java OuterClassAccess.java> | + | <code java AccessOuterClassFromInnerClass.java> |
| - | public class OuterClassAccess | + | public class AccessOuterClassFromInnerClass |
| private int outerPriv; | private int outerPriv; | ||
| int outerPckgPriv; | int outerPckgPriv; | ||
| Line 34: | Line 33: | ||
| public int getOuterPub() { return outerPub; } | public int getOuterPub() { return outerPub; } | ||
| | | ||
| - | public | + | public |
| ic = new InnerClass(1, | ic = new InnerClass(1, | ||
| | | ||
| Line 45: | Line 44: | ||
| | | ||
| private class InnerClass { | private class InnerClass { | ||
| - | | + | //inner class has not fields |
| + | | ||
| public InnerClass(int p, int pp, int pr, int pu) { | public InnerClass(int p, int pp, int pr, int pu) { | ||
| outerPriv = p; | outerPriv = p; | ||
| Line 62: | Line 62: | ||
| | | ||
| public static void main(String args[]) { | public static void main(String args[]) { | ||
| - | | + | |
| System.out.println(oc); | System.out.println(oc); | ||
| } | } | ||
| Line 68: | Line 68: | ||
| </ | </ | ||
| - | < | + | < |
| Από το παραπάνω παράδειγμα, | Από το παραπάνω παράδειγμα, | ||
| </ | </ | ||
| Line 76: | Line 76: | ||
| Το παρακάτω παράδειγμα εξηγεί την προσβασιμότητα της εξωτερικής κλάσης σε πεδία και μεθόδους της εσωτερικής κλάσης. | Το παρακάτω παράδειγμα εξηγεί την προσβασιμότητα της εξωτερικής κλάσης σε πεδία και μεθόδους της εσωτερικής κλάσης. | ||
| - | <code java OuterClass.java> | + | <code java AccessInnerClassFromOuterClass.java> |
| - | public class OuterClass | + | public class AccessInnerClassFromOuterClass |
| int outer; | int outer; | ||
| InnerOuterClass innerObj; | InnerOuterClass innerObj; | ||
| - | public | + | public |
| outer = o; | outer = o; | ||
| innerObj = new InnerOuterClass(); | innerObj = new InnerOuterClass(); | ||
| Line 105: | Line 105: | ||
| | | ||
| public static void main(String[] args) { | public static void main(String[] args) { | ||
| - | | + | |
| } | } | ||
| } | } | ||
| Line 112: | Line 112: | ||
| Όπως θα παρατηρήσετε αν μεταγλωττίσετε και εκτελέσετε το πρόγραμμα η εξωτερική κλάση έχει απόλυτη πρόσβαση στα πεδία και τις μεθόδους της εσωτερικής κλάσης ανεξάρτητα από τον προσδιοριστή πρόσβασης που έχουν αυτά. Η πρόσβαση της εξωτερικής κλάσης στα πεδία της εσωτερικής γίνεται πάντα μέσω ενός αντικειμένου της εξωτερικής κλάσης. | Όπως θα παρατηρήσετε αν μεταγλωττίσετε και εκτελέσετε το πρόγραμμα η εξωτερική κλάση έχει απόλυτη πρόσβαση στα πεδία και τις μεθόδους της εσωτερικής κλάσης ανεξάρτητα από τον προσδιοριστή πρόσβασης που έχουν αυτά. Η πρόσβαση της εξωτερικής κλάσης στα πεδία της εσωτερικής γίνεται πάντα μέσω ενός αντικειμένου της εξωτερικής κλάσης. | ||
| - | < | + | < |
| * H εσωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εξωτερικής κλάσης. | * H εσωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εξωτερικής κλάσης. | ||
| * Η εξωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εσωτερικής κλάσης. Η πρόσβαση στα πεδία αυτά γίνεται μέσω ενός αντικειμένου της εξωτερικής κλάσης. | * Η εξωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εσωτερικής κλάσης. Η πρόσβαση στα πεδία αυτά γίνεται μέσω ενός αντικειμένου της εξωτερικής κλάσης. | ||
| Line 119: | Line 119: | ||
| </ | </ | ||
| - | ===== Χρήση προσδιοριστών πρόσβασης στην εσωτερική κλάση ===== | + | | Προηγούμενο |
| - | + | ||
| - | Είδαμε ότι οι εξωτερικές κλάσεις μπορούν να έχουν τους προσδιοριστές πρόσβασης //public// και //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> | + | |
| - | Το παραπάνω εξηγεί | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | ===== Πρόσβαση από άλλες κλάσεις σε πεδία της εσωτερικής κλάσης ===== | + | |
| - | + | ||
| - | Ο παρακάτω κώδικας | + | |
| - | + | ||
| - | <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); | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Κατά συνέπεια, | + | |
| - | - Η εσωτερική κλάση θα πρέπει | + | |
| - | - Με την προϋπόθεση ότι ισχύει το **1.**, ισχύουν οι [[java: | + | |
| - | + | ||
java/inner_class_access.1486130386.txt.gz · Last modified: 2017/02/03 13:59 by gthanos
