User Tools

Site Tools


java:inner_class_access

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:inner_class_access [2017/02/06 11:20]
gthanos [Πρόσβαση από την εξωτερική κλάση σε πεδία της εσωτερικής κλάσης]
java:inner_class_access [2021/04/12 04:48]
Line 1: Line 1:
-====== Προσβασιμότητα πεδίων και μεθόδων μεταξύ εσωτερικής και εξωτερικής κλάσης ====== 
  
-===== Πρόσβαση στα πεδία της εξωτερικής κλάσης (από την εσωτερική κλάση) ===== 
- 
-Κάθε εσωτερική κλάση έχει πρόσβαση στα πεδία και τις μεθόδους της εξωτερικής κλάσης, **ανεξάρτητα από τους προσδιοριστές πρόσβασης που έχουν αυτά**. Κάθε μέθοδος της εσωτερικής κλάσης μπορεί να έχει πρόσβαση σε μεταβλητές ή μεθόδους της εξωτερικής της κλάσης, ακόμη και εάν αυτές είναι δηλωμένες ως **private**.  
- 
-<WRAP tip 80% round center> 
-Εάν μία μέθοδος της εσωτερικής κλάσης καλεί μία άλλη μέθοδο η οποία δεν ανήκει στην εσωτερική κλάση, τότε ο compiler αναζητά την μέθοδο στην εξωτερική κλάση. Αν δεν την βρει και στην εξωτερική κλάση τότε εμφανίζει μήνυμα λάθους.  
- 
-Αντίστοιχα, εάν μία μέθοδος της εσωτερικής κλάσης χρησιμοποιήσει ένα πεδίο που δεν υπάρχει στην εσωτερική κλάση, ο compiler θα το αναζητήσει στην εξωτερική κλάση και μόνο αν δεν το βρει ούτε εκεί θα εκτυπώσει ένα μήνυμα λάθους. 
-</WRAP> 
- 
-Δείτε το παρακάτω παράδειγμα προσβασιμότητας των πεδίων της εξωτερικής κλάσης από την εσωτερική κλάση: 
- 
-<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,2,3,4); 
-     ic.setOuterClassFields(5,6,7,8); 
-  } 
-   
-  public String toString() { 
-    return "outerPriv: "+outerPriv+", outerPckgPriv: "+outerPckgPriv+ 
-           ", outerProt: "+outerProt+", outerPub: "+outerPub; 
-  } 
-   
-  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); 
-  } 
-} 
-</code> 
- 
-<WRAP important 80% center round> 
-Από το παραπάνω παράδειγμα, παρατηρούμε ότι η εσωτερική κλάση έχει πρόσβαση σε όλα τα πεδία και τις μεθόδους της εξωτερικής κλάσης, ανεξάρτητα από τον προσδιοριστή πρόσβασης που έχουν αυτά. 
-</WRAP> 
- 
-===== Πρόσβαση από την εξωτερική κλάση σε πεδία της εσωτερικής κλάσης ===== 
- 
-Το παρακάτω παράδειγμα εξηγεί την προσβασιμότητα της εξωτερικής κλάσης σε πεδία και μεθόδους της εσωτερικής κλάσης. 
- 
-<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 "innerPriv: "+innerPriv+", innerProt: "+innerProt+ 
-             ", innerPub: "+innerPub;  
-    }     
-  } 
-   
-  public static void main(String[] args) { 
-    OuterClass outer = new OuterClass(5); 
-  }   
-} 
-</code> 
- 
-Όπως θα παρατηρήσετε αν μεταγλωττίσετε και εκτελέσετε το πρόγραμμα η εξωτερική κλάση έχει απόλυτη πρόσβαση στα πεδία και τις μεθόδους της εσωτερικής κλάσης ανεξάρτητα από τον προσδιοριστή πρόσβασης που έχουν αυτά. Η πρόσβαση της εξωτερικής κλάσης στα πεδία της εσωτερικής γίνεται πάντα μέσω ενός αντικειμένου της εξωτερικής κλάσης. 
- 
-<WRAP important 80% center round> 
-  * H εσωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εξωτερικής κλάσης. 
-  * Η εξωτερική κλάση έχει πρόσβαση σε όλα τα πεδία της εσωτερικής κλάσης. Η πρόσβαση στα πεδία αυτά γίνεται μέσω ενός αντικειμένου της εξωτερικής κλάσης. 
- 
-Οι προσδιοριστές πρόσβασης **δεν εισάγουν κανένα περιορισμό** στον προσδιορισμό της προσβασιμότητας των πεδίων και των μεθόδων της εσωτερικής κλάσης από την εξωτερική κλάση και αντίστροφα. 
-</WRAP> 
- 
-| Προηγούμενο : [[ :java:inner_class_objects | Δημιουργία αντικειμένων της εσωτερικής κλάση ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:inner_class_inheritance | Κληρονομικότητα εσωτερικών κλάσεων ]]  | 
java/inner_class_access.txt · Last modified: 2021/04/12 04:48 (external edit)