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/06 08:52] – 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 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), |
| - | innerObj.innerPriv = r.nextInt(10000); | + | |
| - | innerObj.innerPub = r.nextInt(10000); | + | |
| } | } | ||
| | | ||
| Line 30: | Line 32: | ||
| public int innerPub; | public int innerPub; | ||
| | | ||
| - | | + | |
| - | | + | this.innerPriv = innerPriv; |
| - | | + | this.innerProt = innerProt; |
| + | 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); | ||
| } | } | ||
| } | } | ||
| Line 44: | Line 58: | ||
| Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι | Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι | ||
| * αν και η κλάση // | * αν και η κλάση // | ||
| - | * Τα αντικείμενα | + | * Τα αντικείμενα της στατικής εσωτερικής κλάσης ΔΕΝ ανήκουν στην εξωτερική κλάση, όπως συμβαίνει στις μη στατικές κλάσεις. Στο παραπάνω παράδειγμα, η σύνδεση μεταξύ εσωτερικής στατικής και |
| + | * Η τελευταία γραμμή της μεθόδου **main** δείχνει | ||
| </ | </ | ||
| + | |||
| ===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης ===== | ===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης ===== | ||
| - | Σημαντική | + | Σημαντική ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι __δεν έχουν απευθείας πρόσβαση στις μη-στατικές μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν__, |
| Το παρακάτω παράδειγμα δείχνει ότι πως μπορείτε να έχετε πρόσβαση στις μη στατικές μεταβλητές της εξωτερικής κλάσης μέσω ενός αντικειμένου της κλάσης αυτής. | Το παρακάτω παράδειγμα δείχνει ότι πως μπορείτε να έχετε πρόσβαση στις μη στατικές μεταβλητές της εξωτερικής κλάσης μέσω ενός αντικειμένου της κλάσης αυτής. | ||
| Line 76: | 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 88: | Line 104: | ||
| ===== Δημιουργία αντικειμένων της εμφωλευμένης στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης ===== | ===== Δημιουργία αντικειμένων της εμφωλευμένης στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης ===== | ||
| - | Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; | + | Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; |
| <code java TestNonStaticOuterClass.java> | <code java TestNonStaticOuterClass.java> | ||
| Line 100: | Line 116: | ||
| </ | </ | ||
| - | |Προηγούμενο: | + | |Προηγούμενο: |
java/static_nested_classes.1486371125.txt.gz · Last modified: 2017/02/06 08:52 (external edit)
