This shows you the differences between two versions of the page.
|
java:inner_class_objects [2020/03/16 09:19] gthanos |
java:inner_class_objects [2020/03/16 09:19] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Δημιουργία αντικειμένων της εσωτερικής κλάσης ====== | ||
| - | ===== Δημιουργία αντικειμένων της εσωτερικής κλάσης στην εξωτερική κλάση ===== | ||
| - | |||
| - | Απαραίτητη προϋπόθεση για να δημιουργηθεί ένα αντικείμενο της εσωτερικής κλάσης είναι να υπάρχει ένα αντικείμενο της εξωτερικής κλάσης. Δεν μπορείτε να έχετε δηλαδή οποιαδήποτε αντικείμενο της εσωτερικής κλάσης χωρίς αυτό να συνδυαστεί με ένα αντικείμενο της εξωτερικής κλάσης. | ||
| - | |||
| - | Δείτε το παρακάτω παράδειγμα δημιουργίας ενός αντικειμένου της εσωτερικής κλάσης μέσα στον κατασκευαστή της εξωτερικής κλάσης | ||
| - | |||
| - | <code java OuterClass.java> | ||
| - | public class OuterClass { | ||
| - | |||
| - | int outerClassField; | ||
| - | InnerClass ic; | ||
| - | |||
| - | public OuterClass(int field) { | ||
| - | outerClassField = field; | ||
| - | ic = new InnerClass(field*2); | ||
| - | } | ||
| - | | ||
| - | class InnerClass { | ||
| - | int innerClassField; | ||
| - | | ||
| - | public InnerClass(int field) { | ||
| - | innerClassField = field; | ||
| - | } | ||
| - | | ||
| - | public String toString() { | ||
| - | return " | ||
| - | } | ||
| - | } | ||
| - | | ||
| - | public String toString() { | ||
| - | return " | ||
| - | } | ||
| - | | ||
| - | public static void main(String []args) { | ||
| - | OuterClass outer = new OuterClass(10); | ||
| - | System.out.println(outer); | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Δημιουργία αντικειμένων της εσωτερικής κλάσης από άλλες κλάσεις ή στατικές μεθόδους ===== | ||
| - | |||
| - | Προηγούμενα αναφέρθηκε ότι για να δημιουργηθεί ένα αντικείμενο της εσωτερικής κλάσης θα πρέπει να υπάρχει ένα αντικείμενο της εξωτερικής κλάσης. Δείτε πως μπορείτε να δημιουργήσετε σε μία στατική μέθοδο (//όπως είναι η μέθοδος **main**//) ένα αντικείμενο της εσωτερικής κλάσης με βάση την εξωτερική κλάση. | ||
| - | |||
| - | <code java OuterClass.java> | ||
| - | public class OuterClass { | ||
| - | int outerClassField; | ||
| - | InnerClass ic; | ||
| - | |||
| - | public OuterClass(int field) { | ||
| - | outerClassField = field; | ||
| - | ic = new InnerClass(field*2); | ||
| - | } | ||
| - | | ||
| - | class InnerClass { | ||
| - | int innerClassField; | ||
| - | | ||
| - | public InnerClass(int field) { | ||
| - | innerClassField = field; | ||
| - | } | ||
| - | | ||
| - | public String toString() { | ||
| - | return " | ||
| - | } | ||
| - | } | ||
| - | | ||
| - | public String toString() { | ||
| - | return " | ||
| - | } | ||
| - | } | ||
| - | |||
| - | class TestOuterClass { | ||
| - | public static void main(String []args) { | ||
| - | OuterClass outer = new OuterClass(10); | ||
| - | System.out.println(outer); | ||
| - | OuterClass.InnerClass inner = outer.new InnerClass(4); | ||
| - | System.out.println(inner.toString()); | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | Αρχικά, | ||
| - | <code java> | ||
| - | OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); | ||
| - | </ | ||
| - | |||
| - | <WRAP todo 80% round center> | ||
| - | Είναι προφανές ότι μπορούμε να φτιάξουμε πολλαπλά αντικείμενα της εσωτερικής κλάσης, | ||
| - | <code java TestOuterClass.java> | ||
| - | public class TestOuterClass { | ||
| - | public static void mian(String args[]) { | ||
| - | OuterClass outer; | ||
| - | OuterClass.InnerOuterClass inner = outer.new InnerOuterClass(4); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | Σε αυτή την περίπτωση λαμβάνετε από τον μεταγλωττιστή ένα μήνυμα λάθους της μορφής | ||
| - | < | ||
| - | OuterClass.java: | ||
| - | OuterClass.InnerClass inner = outer.new InnerClass(4); | ||
| - | ^ | ||
| - | 1 error | ||
| - | </ | ||
| - | Δοκιμάστε το. | ||
| - | </ | ||
| - | |||
| - | Οι εσωτερικές κλάσεις μπορούν να έχουν προσδιοριστές πρόσβασης (//public, protected, package-private, | ||
| - | |||
| - | | Προηγούμενο : [[ : | ||