java:inner_class_access_from_outside

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

java:inner_class_access_from_outside [2017/02/03 14:14]
gthanos
java:inner_class_access_from_outside [2018/03/21 07:40]
Line 1: Line 1:
- 
-====== Πρόσβαση από άλλες κλάσεις σε πεδία της εσωτερικής κλάσης ====== 
- 
- 
-===== Χρήση προσδιοριστών πρόσβασης στην εσωτερική κλάση ===== 
- 
-Είδαμε ότι οι εξωτερικές κλάσεις μπορούν να έχουν τους προσδιοριστές πρόσβασης //public// και //package private// (κανένας προσδιοριστής). Για τις εσωτερικές κλάσεις ο κανόνας  
- 
-Στο προηγούμενο παράδειγμα δοκιμάστε να αλλάξετε τον προσδιοριστή πρόσβασης της κλάσης **InnerClass** από package private σε private. Σε αυτή την περίπτωση θα παρατηρήσετε ότι η κλάση **TestOuterClass** δεν μεταγλωττίζεται. Συγκεκριμένα, o compiler εμφανίζει το παρακάτω μήνυμα λάθους, σημειώνοντας ότι ο προσδιοριστής πρόσβασης **private** δεν επιτρέπει τη πρόσβαση από μία άλλη κλάση στο συγκεκριμένο περιεχόμενο της **OuterClass**. Γενικότερα, ισχύουν οι κανόνες για τους προσδιοριστές πρόσβασης όπως αυτοί αναφέρονται [[java:access_modifiers|εδώ]]. 
- 
-<code> 
-TestOuterClass.java:6: error: OuterClass.InnerOuterClass has private access in OuterClass 
-    OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); 
-              ^ 
-TestOuterClass.java:6: error: OuterClass.InnerOuterClass has private access in OuterClass 
-    OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); 
-</code> 
- 
-<WRAP tip 80% center round> 
-Το παραπάνω εξηγεί ικανοποιητικά τον τρόπο με τον οποίο μπορείτε να αποκλείσετε την πρόσβαση στην εσωτερική κλάση από άλλες κλάσεις πέραν της εξωτερικής. Ορίζοντας την εσωτερική κλάση ως **private** αυτή είναι προσβάσιμη μόνο από την εξωτερική της κλάση. 
-</WRAP> 
- 
- 
-===== Πρόσβαση από άλλες κλάσεις σε πεδία της εσωτερικής κλάσης ===== 
- 
-Ο παρακάτω κώδικας επιχειρεί να δημιουργήσει ένα αντικείμενο μίας εσωτερικής κλάσης από μία άλλη κλάση. Σε αυτή την περίπτωση και __με την προϋπόθεση ότι η εσωτερική κλάση είναι συνολικά προσβάσιμη__ από την κλάση που επιχειρεί να δημιουργήσει το αντικείμενο, η προσβασιμότητα των πεδίων και των μεθόδων της εσωτερικής κλάσης εξαρτάται από τους προσδιοριστές πρόσβασης που έχουν αυτά. Δείτε το παρακάτω παράδειγμα. 
- 
-<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 "innerPriv: "+innerPriv+", innerProt: "+innerProt+ 
-             ", innerPub: "+innerPub;  
-    }     
-  } 
-   
-} 
-</code> 
- 
-<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);     
-  } 
-} 
-</code> 
- 
-Κατά συνέπεια, για την προσβασιμότητα των πεδίων και των μεθόδων της εσωτερικής κλάσης από μία άλλη κλάση ισχύουν τα εξής: 
-  - Η εσωτερική κλάση θα πρέπει να είναι συνολικά προσβάσιμη. 
-  - Με την προϋπόθεση ότι ισχύει το **1.**, ισχύουν οι [[java:access_modifiers|κανόνες προσβασιμότητας]] που ορίζονται από προσδιοριστές πρόσβασης. 
- 
  
java/inner_class_access_from_outside.txt · Last modified: 2018/03/21 07:40 (external edit)