This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:inner_class_access [2017/02/06 11:20] gthanos [Πρόσβαση από την εξωτερική κλάση σε πεδία της εσωτερικής κλάσης] |
java:inner_class_access [2021/04/12 04:48] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Προσβασιμότητα πεδίων και μεθόδων μεταξύ εσωτερικής και εξωτερικής κλάσης ====== | ||
| - | ===== Πρόσβαση στα πεδία της εξωτερικής κλάσης (από την εσωτερική κλάση) ===== | ||
| - | |||
| - | Κάθε εσωτερική κλάση έχει πρόσβαση στα πεδία και τις μεθόδους της εξωτερικής κλάσης, | ||
| - | |||
| - | <WRAP tip 80% round center> | ||
| - | Εάν μία μέθοδος της εσωτερικής κλάσης καλεί μία άλλη μέθοδο η οποία δεν ανήκει στην εσωτερική κλάση, τότε ο compiler αναζητά την μέθοδο στην εξωτερική κλάση. Αν δεν την βρει και στην εξωτερική κλάση τότε εμφανίζει μήνυμα λάθους. | ||
| - | |||
| - | Αντίστοιχα, | ||
| - | </ | ||
| - | |||
| - | Δείτε το παρακάτω παράδειγμα προσβασιμότητας των πεδίων της εξωτερικής κλάσης από την εσωτερική κλάση: | ||
| - | |||
| - | <code java OuterClassAccess.java> | ||
| - | public class OuterClassAccess { | ||
| - | private int outerPriv; | ||
| - | int outerPckgPriv; | ||
| - | protected int outerProt; | ||
| - | public int outerPub; | ||
| - | InnerClass ic; | ||
| - | | ||
| - | private void setOuterPriv(int v) { outerPriv = v; } | ||
| - | private int getOuterPriv() { return outerPriv; } | ||
| - | | ||
| - | void setOuterPckgPriv(int v) { outerPckgPriv = v; } | ||
| - | int getPckgOuterPriv() { return outerPckgPriv; | ||
| - | | ||
| - | protected void setOuterProt(int v) { outerProt = v; } | ||
| - | protected int getOuterProt() { return outerProt; } | ||
| - | | ||
| - | public void setOuterPub(int v) { outerPub = v; } | ||
| - | public int getOuterPub() { return outerPub; } | ||
| - | | ||
| - | public OuterClassAccess() { | ||
| - | ic = new InnerClass(1, | ||
| - | | ||
| - | } | ||
| - | | ||
| - | public String toString() { | ||
| - | return " | ||
| - | ", | ||
| - | } | ||
| - | | ||
| - | private class InnerClass { | ||
| - | | ||
| - | public InnerClass(int p, int pp, int pr, int pu) { | ||
| - | outerPriv = p; | ||
| - | outerPckgPriv = pp; | ||
| - | outerProt = pr; | ||
| - | outerPub = pu; | ||
| - | } | ||
| - | | ||
| - | public void setOuterClassFields(int p, int pp, int pr, int pu) { | ||
| - | setOuterPriv(p); | ||
| - | setOuterPckgPriv(pp); | ||
| - | setOuterProt(pr); | ||
| - | setOuterPub(pu); | ||
| - | } | ||
| - | } | ||
| - | | ||
| - | public static void main(String args[]) { | ||
| - | OuterClassAccess oc = new OuterClassAccess(); | ||
| - | System.out.println(oc); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <WRAP important 80% center round> | ||
| - | Από το παραπάνω παράδειγμα, | ||
| - | </ | ||
| - | |||
| - | ===== Πρόσβαση από την εξωτερική κλάση σε πεδία της εσωτερικής κλάσης ===== | ||
| - | |||
| - | Το παρακάτω παράδειγμα εξηγεί την προσβασιμότητα της εξωτερικής κλάσης σε πεδία και μεθόδους της εσωτερικής κλάσης. | ||
| - | |||
| - | <code java OuterClass.java> | ||
| - | public class OuterClass { | ||
| - | int outer; | ||
| - | InnerOuterClass innerObj; | ||
| - | |||
| - | public OuterClass(int o) { | ||
| - | outer = o; | ||
| - | innerObj = new InnerOuterClass(); | ||
| - | innerObj.innerPriv = 10; | ||
| - | innerObj.innerProt = 20; | ||
| - | innerObj.innerPub = 30; | ||
| - | System.out.println(innerObj); | ||
| - | } | ||
| - | |||
| - | class InnerOuterClass { | ||
| - | 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 " | ||
| - | ", | ||
| - | } | ||
| - | } | ||
| - | | ||
| - | public static void main(String[] args) { | ||
| - | OuterClass outer = new OuterClass(5); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Όπως θα παρατηρήσετε αν μεταγλωττίσετε και εκτελέσετε το πρόγραμμα η εξωτερική κλάση έχει απόλυτη πρόσβαση στα πεδία και τις μεθόδους της εσωτερικής κλάσης ανεξάρτητα από τον προσδιοριστή πρόσβασης που έχουν αυτά. Η πρόσβαση της εξωτερικής κλάσης στα πεδία της εσωτερικής γίνεται πάντα μέσω ενός αντικειμένου της εξωτερικής κλάσης. | ||
| - | |||
| - | <WRAP important 80% center round> | ||
| - | * H εσωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εξωτερικής κλάσης. | ||
| - | * Η εξωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εσωτερικής κλάσης. Η πρόσβαση στα πεδία αυτά γίνεται μέσω ενός αντικειμένου της εξωτερικής κλάσης. | ||
| - | |||
| - | Οι προσδιοριστές πρόσβασης **δεν εισάγουν κανένα περιορισμό** στον προσδιορισμό της προσβασιμότητας των πεδίων και των μεθόδων της εσωτερικής κλάσης από την εξωτερική κλάση και αντίστροφα. | ||
| - | </ | ||
| - | |||
| - | | Προηγούμενο : [[ : | ||