User Tools

Site Tools


java:static_nested_classes

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:static_nested_classes [2017/02/06 08:53] – [Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης] gthanosjava:static_nested_classes [2020/03/16 09:55] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Στατικές εμφωλευμένες κλάσεις ====== ====== Στατικές εμφωλευμένες κλάσεις ======
 +
 +<WRAP important 70% center round>
 +===Η συγκεκριμένη ενότητα είναι προαιρετική και μπορείτε να την παραλήψετε κατά την ανάγνωση της θεωρείας του μαθήματος.===
 +</WRAP>
  
 Μέχρι τώρα ορίσαμε στατικές μεθόδους και στατικές μεταβλητές, ως μεθόδους και μεταβλητές που ανήκουν στην κλάση. Οι εμφωλευμένες κλάσεις μπορούν να οριστούν και ως στατικές (**static**). Στατικές εμφωλευμένες κλάσεις είστε υποχρεωμένοι να ορίσετε στις παρακάτω περιπτώσεις: Μέχρι τώρα ορίσαμε στατικές μεθόδους και στατικές μεταβλητές, ως μεθόδους και μεταβλητές που ανήκουν στην κλάση. Οι εμφωλευμένες κλάσεις μπορούν να οριστούν και ως στατικές (**static**). Στατικές εμφωλευμένες κλάσεις είστε υποχρεωμένοι να ορίσετε στις παρακάτω περιπτώσεις:
Line 16: Line 20:
     outer = o;     outer = o;
     java.util.Random r = new java.util.Random();     java.util.Random r = new java.util.Random();
-    innerObj = new StaticInnerClass(); +    innerObj = new StaticInnerClass(r.nextInt(100), r.nextInt(100), r.nextInt(100));
-    innerObj.innerPriv = r.nextInt(10000)+
-    innerObj.innerPub = r.nextInt(10000);+
   }   }
      
Line 30: Line 32:
     public int innerPub;     public int innerPub;
          
-    private void setInnerPriv(int priv) { innerPriv = priv} +    public StaticInnerClass(int innerPriv, int innerProt,int innerPub) { 
-    public void setInnerProt(int prot) { innerProt = prot} +      this.innerPriv = innerPriv
-    public void setInnerPub(int pub) { innerPub = pub; }+      this.innerProt = innerProt
 +      this.innerPub = innerPub; 
 +       
          
     public String toString() {      public String toString() { 
       return "innerPriv: "+innerPriv+", innerPub: "+innerPub +", innerProt: "+innerProt;        return "innerPriv: "+innerPriv+", innerPub: "+innerPub +", innerProt: "+innerProt; 
     }         }    
 +  }
 +  
 +  public static void main(String args[]) {
 +    NonStaticOuterClass myOuter = new NonStaticOuterClass(10);
 +    System.out.println(myOuter.innerObj.toString());
 +    StaticInnerClass myInnerObj = new StaticInnerClass(15, 20, 35);
 +    System.out.println(myInnerObj);
 +    
 +    NonStaticOuterClass.StaticInnerClass myInnerObj2 = new NonStaticOuterClass.StaticInnerClass(100, 200, 300);
 +    System.out.println(myInnerObj2);
   }     }  
 } }
Line 44: Line 58:
 Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι  Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι 
   * αν και η κλάση //StaticInnerClass// δηλώνεται ως //static// μπορεί να δημιουργηθούν πολλαπλά αντικείμενα της κλάσης αυτής.    * αν και η κλάση //StaticInnerClass// δηλώνεται ως //static// μπορεί να δημιουργηθούν πολλαπλά αντικείμενα της κλάσης αυτής. 
-  * Τα αντικείμενα αυτά __συνδέονται με το αντικείμενο της εξωτερικής κλάσης που δημιουργείται από τον κατασκευαστή της εξωτερικής κλάσης__ και όχι με την εξωτερική κλάση, όπως συμβαίνει με τις //static// μεταβλητές της γονικής κλάσης.+  * Τα αντικείμενα της στατικής εσωτερικής κλάσης ΔΕΝ ανήκουν στην εξωτερική κλάση, όπως συμβαίνει στις μη στατικές κλάσεις. Στο παραπάνω παράδειγμα, η σύνδεση μεταξύ εσωτερικής στατικής και εξωτερικής μη στατικής κλάσης έγκειται στο γεγονός ότι ένα πεδίο της εξωτερικής κλάσης είναι του τύπου της εσωτερικής κλάσης. 
 +  * Η τελευταία γραμμή της μεθόδου **main** δείχνει ότι οι στατικές εσωτερικές κλάσεις μπορούν να οριστούν ανεξάρτητα από αντικείμενα της εξωτερικής τους κλάσης. Επιβεβαιώστε την αλήθεια του ισχυρισμού μεταγλωττίζοντας και εκτελώντας τον παραπάνω κώδικα.
 </WRAP> </WRAP>
 +
  
 ===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης ===== ===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης =====
  
-Σημαντική επιπλέον ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι __δεν έχουν απευθείας πρόσβαση στις μη-στατικές μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν__, **αλλά μόνο στις στατικές μεταβλητές αυτής**. H πρόσβαση στις μη-στατικές μεταβλητές μπορεί να γίνει μέσα από ένα αντικείμενο της εξωτερικής κλάσης.+Σημαντική ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι __δεν έχουν απευθείας πρόσβαση στις μη-στατικές μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν__, **αλλά μόνο στις στατικές μεταβλητές αυτής**. H πρόσβαση στις μη-στατικές μεταβλητές μπορεί να γίνει μέσα από ένα αντικείμενο της εξωτερικής κλάσης.
  
 Το παρακάτω παράδειγμα δείχνει ότι πως μπορείτε να έχετε πρόσβαση στις μη στατικές μεταβλητές της εξωτερικής κλάσης μέσω ενός αντικειμένου της κλάσης αυτής. Το παρακάτω παράδειγμα δείχνει ότι πως μπορείτε να έχετε πρόσβαση στις μη στατικές μεταβλητές της εξωτερικής κλάσης μέσω ενός αντικειμένου της κλάσης αυτής.
Line 88: Line 104:
 ===== Δημιουργία αντικειμένων της εμφωλευμένης στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης ===== ===== Δημιουργία αντικειμένων της εμφωλευμένης στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης =====
  
-Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; Δείτε το παρακάτω παράδειγμα κώδικα και παρατηρήστε την διαφορά σε σχέση με την δημιουργία αντικειιμένων που ανήκουν σε μη στατικές κλάσεις.+Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; Δείτε το παρακάτω παράδειγμα κώδικα και παρατηρήστε την διαφορά σε σχέση με την δημιουργία αντικειμένων που ανήκουν σε μη στατικές κλάσεις.
  
 <code java TestNonStaticOuterClass.java> <code java TestNonStaticOuterClass.java>
Line 100: Line 116:
 </code> </code>
  
-|Προηγούμενο: [[ :java:nested_classes| Εμφωλευμένες κλάσεις  ]] | Επόμενο: [[ :java:inner_classes Μη στατικές εμφωλευμένες κλάσεις ]]|+|Προηγούμενο: [[ :java:nested_classes| Εμφωλευμένες κλάσεις  ]] | Επόμενο: [[ :java:exceptions_intro Εξαιρέσεις ]]|
  
  
  
java/static_nested_classes.1486371201.txt.gz · Last modified: 2017/02/06 08:53 (external edit)