This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:static_nested_classes [2015/04/30 12:24] gthanos |
java:static_nested_classes [2016/02/26 11:15] (current) |
||
---|---|---|---|
Line 6: | Line 6: | ||
* Οι μη στατικές εμφωλευμένες κλάσεις __δεν μπορούν__ να έχουν στατικά πεδία ή στατικές μεθόδους. Αν θέλετε να ορίσετε ένα στατικό πεδίο ή μέθοδο στην εμφωλευμένη κλάση θα πρέπει να την ορίσετε ως //static//. Προσπαθήστε να ορίσετε ένα στατικό πεδία μέσα σε μία μη στατική εμφωλευμένη κλάση και δείτε το μήνυμα του compiler. | * Οι μη στατικές εμφωλευμένες κλάσεις __δεν μπορούν__ να έχουν στατικά πεδία ή στατικές μεθόδους. Αν θέλετε να ορίσετε ένα στατικό πεδίο ή μέθοδο στην εμφωλευμένη κλάση θα πρέπει να την ορίσετε ως //static//. Προσπαθήστε να ορίσετε ένα στατικό πεδία μέσα σε μία μη στατική εμφωλευμένη κλάση και δείτε το μήνυμα του compiler. | ||
* Αν θέλετε να δημιουργήσετε ένα αντικείμενο ή να καλέσετε μεθόδους της εμφωλευμένης κλάσης μέσα από μία στατική μέθοδο της εξωτερικής κλάσης θα πρέπει η εμφωλευμένη κλάση να έχει οριστεί ως //static//. | * Αν θέλετε να δημιουργήσετε ένα αντικείμενο ή να καλέσετε μεθόδους της εμφωλευμένης κλάσης μέσα από μία στατική μέθοδο της εξωτερικής κλάσης θα πρέπει η εμφωλευμένη κλάση να έχει οριστεί ως //static//. | ||
- | * Σημαντική ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι δεν έχουν απευθείας πρόσβαση στις μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν. | ||
</WRAP> | </WRAP> | ||
- | Δείτε το παρακάτω παράδειγμα: | + | Δείτε το παρακάτω παράδειγμα: |
<code java NonStaticOuterClass.java> | <code java NonStaticOuterClass.java> | ||
Line 46: | Line 45: | ||
</code> | </code> | ||
- | Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι αν και η κλάση //StaticInnerClass// δηλώνεται ως //static// μπορεί να δημιουργηθούν πολλαπλά αντικείμενα μέσα σε κάθε γονική κλάση. Τα αντικείμενα αυτά __συνδέονται με το αντικείμενο της γονικής κλάσης και όχι με την γονική κλάση__ (όπως οι //static// μεταβλητές). | + | Από την μεταγλώττιση και εκτέλεση του παραπάνω κώδικα παρατηρούμε ότι αν και η κλάση //StaticInnerClass// δηλώνεται ως //static// μπορεί να δημιουργηθούν πολλαπλά αντικείμενα της κλάσης αυτής. Επίσης, τα αντικείμενα αυτά __συνδέονται με το αντικείμενο της γονικής κλάσης και όχι με την γονική κλάση__ (όπως οι //static// μεταβλητές). |
- | <WRAP important 80% center round> | + | ===== Πρόσβαση στα στατικά και μη στατικά πεδία της εξωτερικής κλάσης ===== |
- | Σημαντική επιπλέον ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι __δεν έχουν απευθείας πρόσβαση στις μη-στατικές μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν__, **παρά μόνο στις στατικές μεταβλητές αυτής**. H πρόσβαση στις μη-στατικές μεταβλήτές αυτή μπορεί να γίνει μέσα από ένα αντικείμενο της εξωτερικής κλάσης, όπως φαίνεται παρακάτω. | + | |
- | </WRAP> | + | Σημαντική επιπλέον ιδιαιτερότητα των //static// εμφωλευμένων κλάσεων είναι ότι __δεν έχουν απευθείας πρόσβαση στις μη-στατικές μεταβλητές της εξωτερικής κλάσης στην οποία ανήκουν__, **παρά μόνο στις στατικές μεταβλητές αυτής**. H πρόσβαση στις μη-στατικές μεταβλητές αυτής μπορεί να γίνει μέσα από ένα αντικείμενο της εξωτερικής κλάσης. |
- | Δείτε το παρακάτω παράδειγμα. Παρατηρήστε πως μπορείτε να έχετε πρόσβαση στις μη στατικές μεταβλητές της εξωτερικής κλάσης μέσω του πιο πάνω επιπέδου. | + | Δείτε το παρακάτω παράδειγμα. Παρατηρήστε πως μπορείτε να έχετε πρόσβαση στις μη στατικές μεταβλητές της εξωτερικής κλάσης μέσω ενός αντικειμένου της κλάσης αυτής. |
<code java NonStaticOuterClass.java> | <code java NonStaticOuterClass.java> | ||
Line 87: | Line 86: | ||
</code> | </code> | ||
- | Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής της κλάσης; Δείτε το παρακάτω παράδειγμα κώδικα και παρατηρήστε την διαφορά σε σχέση με τις μη στατικές κλάσεις. | + | ===== Δημιουργία αντικειμένων της στατικής κλάσης από μία τρίτη κλάση διαφορετική της εξωτερικής κλάσης ===== |
+ | |||
+ | Πως όμως μπορείτε να δημιουργήσετε αντικείμενα μίας εμφωλευμένης στατικής κλάσης μέσα σε μία άλλη κλάση, διαφορετική της εξωτερικής κλάσης; Δείτε το παρακάτω παράδειγμα κώδικα και παρατηρήστε την διαφορά σε σχέση με την δημιουργία αντικειιμένων που ανήκουν σε μη στατικές κλάσεις. | ||
<code java TestNonStaticOuterClass.java> | <code java TestNonStaticOuterClass.java> | ||
Line 98: | Line 99: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | |Προηγούμενο: [[ :java:nested_classes| Εμφωλευμένες κλάσεις ]] | Επόμενο: [[ :java:inner_classes | Μη στατικές εμφωλευμένες κλάσεις ]]| | ||
+ | |||