java:static_nested_classes

Differences

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

Link to this comparison view

java:static_nested_classes [2015/04/30 11:49]
gthanos
java:static_nested_classes [2016/02/26 11:15]
Line 1: Line 1:
-====== Στατικές εμφωλευμένες κλάσεις ====== 
  
-Μέχρι τώρα ορίσαμε στατικές μεθόδους και στατικές μεταβλητές,​ ως μεθόδους και μεταβλητές που ανήκουν στην κλάση. Οι εμφωλευμένες κλάσεις μπορούν να οριστούν και ως στατικές (**static**) με τις εξής ιδιαιτερότητες:​ 
- 
-  * Οι μη στατικές εμφωλευμένες κλάσεις __δεν μπορούν__ να έχουν στατικά πεδία ή στατικές μεθόδους. Αν θέλετε να ορίσετε ένα στατικό πεδίο ή μέθοδο στην εμφωλευμένη κλάση θα πρέπει να την ορίσετε ως //static//. 
-  * Αν θέλετε να δημιουργήσετε ένα αντικείμενο ή να καλέσετε μεθόδους της εμφωλευμένης κλάσης μέσα από μία στατική μέθοδο της εξωτερικής κλάσης θα πρέπει η εμφωλευμένη κλάση να έχει οριστεί ως //static//. 
- 
-Σημαντική ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι δεν έχουν απευθείας πρόσβαση στις μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν. Δείτε το παρακάτω παράδειγμα:​ 
- 
-<code java NonStaticOuterClass.java>​ 
-public class NonStaticOuterClass { 
-  static int outer; 
-  StaticInnerClass innerObj; 
-  StaticInnerClass innerObj1; 
- 
-  public NonStaticOuterClass(int o) { 
-    outer = o; 
-    java.util.Random r = new java.util.Random();​ 
-    innerObj = new StaticInnerClass();​ 
-    innerObj.innerPriv = r.nextInt(10000);​ 
-    innerObj1 = new StaticInnerClass(); ​   ​ 
-    innerObj1.innerPriv = r.nextInt(10000);​ 
-  } 
-  ​ 
-  public String toString() { 
-     ​return "​outer:​ "​+outer+"​ | "​+innerObj.toString() +" - "+ innerObj1.toString();​ 
-  }  ​ 
-  ​ 
-  public static class StaticInnerClass { 
-    private int innerPriv; 
-    protected int innerProt; 
-    public int innerPub; 
-    ​ 
-    private void setInnerPriv(int priv) { innerPriv = priv; } 
-    public void setInnerPub(int pub) { innerPub = pub; } 
-    public String toString() {  
-      return "​innerPub:​ "​+innerPub; ​ 
-    }    ​ 
-  }  ​ 
-} 
-</​code>​ 
- 
-<code java TestNonStaticOuterClass.java>​ 
-public class TestNonStaticOuterClass { 
-  public static void main(String args[]) { 
-    NonStaticOuterClass outer = new NonStaticOuterClass(5);​ 
-    NonStaticOuterClass outer1 = new NonStaticOuterClass(10);​ 
-    System.out.println(outer);​ 
-    System.out.println("#########################"​);​ 
-    System.out.println(outer1);​ 
-  } 
-} 
-</​code>​ 
- 
-Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι αν και η κλάση //​StaticInnerClass//​ δηλώνεται ως //static// μπορεί να δημιουργηθούν πολλαπλά αντικείμενα μέσα σε κάθε γονική κλάση. Τα αντικείμενα αυτά συνδέονται με το αντικείμενο της γονικής κλάσης και όχι με την γονική κλάση (όπως οι //static// μεταβλητές). 
- 
-< 
java/static_nested_classes.txt · Last modified: 2016/02/26 11:15 (external edit)