java:static_nested_classes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:static_nested_classes [2017/02/03 11:35] – [Δημιουργία αντικειμένων της στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης] gthanos | java:static_nested_classes [2020/03/16 09:55] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Στατικές εμφωλευμένες κλάσεις ====== | ====== Στατικές εμφωλευμένες κλάσεις ====== | ||
+ | |||
+ | <WRAP important 70% center round> | ||
+ | ===Η συγκεκριμένη ενότητα είναι προαιρετική και μπορείτε να την παραλήψετε κατά την ανάγνωση της θεωρείας του μαθήματος.=== | ||
+ | </ | ||
Μέχρι τώρα ορίσαμε στατικές μεθόδους και στατικές μεταβλητές, | Μέχρι τώρα ορίσαμε στατικές μεθόδους και στατικές μεταβλητές, | ||
Line 6: | Line 10: | ||
- Αν θέλετε να δημιουργήσετε ένα αντικείμενο ή να καλέσετε μεθόδους της εμφωλευμένης κλάσης μέσα από μία στατική μέθοδο της εξωτερικής κλάσης θα πρέπει η εμφωλευμένη κλάση να έχει οριστεί ως //static//. | - Αν θέλετε να δημιουργήσετε ένα αντικείμενο ή να καλέσετε μεθόδους της εμφωλευμένης κλάσης μέσα από μία στατική μέθοδο της εξωτερικής κλάσης θα πρέπει η εμφωλευμένη κλάση να έχει οριστεί ως //static//. | ||
- | Δείτε το παρακάτω παράδειγμα: | + | Δείτε το παρακάτω παράδειγμα, όπου η εσωτερική στατική κλάση έχει πρόσβαση στο στατικό πεδίο της εξωτερικής κλάσης. |
<code java NonStaticOuterClass.java> | <code java NonStaticOuterClass.java> | ||
Line 12: | Line 16: | ||
static int outer; | static int outer; | ||
StaticInnerClass innerObj; | StaticInnerClass innerObj; | ||
- | StaticInnerClass innerObj1; | ||
public NonStaticOuterClass(int o) { | public NonStaticOuterClass(int o) { | ||
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); | + | |
- | innerObj1 = new StaticInnerClass(); | + | |
- | innerObj1.innerPriv = r.nextInt(10000); | + | |
- | innerObj1.innerPub = r.nextInt(10000); | + | |
} | } | ||
| | ||
public String toString() { | public String toString() { | ||
- | | + | |
} | } | ||
| | ||
Line 34: | Line 32: | ||
public int innerPub; | public int innerPub; | ||
| | ||
- | | + | |
- | | + | this.innerPriv = innerPriv; |
+ | | ||
+ | this.innerPub = innerPub; | ||
+ | | ||
+ | | ||
public String toString() { | public String toString() { | ||
- | return " | + | return " |
} | } | ||
+ | } | ||
+ | | ||
+ | public static void main(String args[]) { | ||
+ | NonStaticOuterClass myOuter = new NonStaticOuterClass(10); | ||
+ | System.out.println(myOuter.innerObj.toString()); | ||
+ | StaticInnerClass myInnerObj = new StaticInnerClass(15, | ||
+ | System.out.println(myInnerObj); | ||
+ | | ||
+ | NonStaticOuterClass.StaticInnerClass myInnerObj2 = new NonStaticOuterClass.StaticInnerClass(100, | ||
+ | System.out.println(myInnerObj2); | ||
} | } | ||
} | } | ||
</ | </ | ||
- | Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι αν και η κλάση // | + | <WRAP tip 80% center round> |
+ | Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι | ||
+ | * αν και η κλάση // | ||
+ | * Τα αντικείμενα | ||
+ | * Η τελευταία γραμμή της μεθόδου **main** δείχνει ότι οι στατικές εσωτερικές κλάσεις | ||
+ | </ | ||
===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης ===== | ===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης ===== | ||
- | Σημαντική | + | Σημαντική ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι __δεν έχουν απευθείας πρόσβαση στις μη-στατικές μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν__, |
- | Δείτε το παρακάτω παράδειγμα. Παρατηρήστε | + | Το παρακάτω παράδειγμα |
<code java NonStaticOuterClass.java> | <code java NonStaticOuterClass.java> | ||
Line 74: | Line 92: | ||
void setOuterClassDirectly(int o) { | void setOuterClassDirectly(int o) { | ||
s_int = o; | s_int = o; | ||
- | //sn_int = 2*o; | + | //sn_int = 2*o; // comment out this line and compile again |
} | } | ||
| | ||
Line 86: | Line 104: | ||
===== Δημιουργία αντικειμένων της εμφωλευμένης στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης ===== | ===== Δημιουργία αντικειμένων της εμφωλευμένης στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης ===== | ||
- | Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; | + | Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; |
<code java TestNonStaticOuterClass.java> | <code java TestNonStaticOuterClass.java> | ||
Line 98: | Line 116: | ||
</ | </ | ||
- | |Προηγούμενο: | + | |Προηγούμενο: |
java/static_nested_classes.1486121723.txt.gz · Last modified: 2017/02/03 11:35 (external edit)