Middle
Ποιοι τύποι εσωτερικών κλάσεων υπάρχουν;
sobes.tech AI
Απάντηση από AI
Στατικοί εσωτερικοί κλάσεις και εσωτερικές κλάσεις (μη στατικές εσωτερικές κλάσεις).
-
Στατικές εσωτερικές κλάσεις:
- Δηλώνονται με τη λέξη-κλειδί
static. - Έχουν πρόσβαση μόνο σε στατικά μέλη (πεδία και μεθόδους) της εξωτερικής κλάσης, συμπεριλαμβανομένων των ιδιωτικών.
- Δεν έχουν άμεση πρόσβαση σε μη στατικά μέλη της εξωτερικής κλάσης.
- Μπορούν να δημιουργηθούν χωρίς ένα στιγμιότυπο της εξωτερικής κλάσης.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Στατική μεταβλητή: " + staticVar); // System.out.println("Μεταβλητή στιγμιότυπου: " + instanceVar); // Σφάλμα μεταγλώττισης } } } - Δηλώνονται με τη λέξη-κλειδί
-
Εσωτερικές κλάσεις (μη στατικές εσωτερικές κλάσεις):
- Δηλώνονται χωρίς τη λέξη-κλειδί
static. - Έχουν πλήρη πρόσβαση σε όλα τα μέλη (στατικά και μη στατικά) της εξωτερικής κλάσης, συμπεριλαμβανομένων των ιδιωτικών.
- Δεν μπορούν να περιέχουν στατικά μέλη (πεδία ή μεθόδους), εκτός από τελικές σταθερές.
- Απαιτούν την ύπαρξη ενός στιγμιότυπου της εξωτερικής κλάσης για τη δημιουργία τους.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Στατική μεταβλητή: " + staticVar); System.out.println("Μεταβλητή στιγμιότυπου: " + instanceVar); } } } - Δηλώνονται χωρίς τη λέξη-κλειδί
-
Τοπικές κλάσεις:
- Δηλώνονται μέσα σε μεθόδους, κατασκευαστές ή μπλοκ αρχικοποίησης.
- Έχουν πρόσβαση σε όλες τις τελικές και ουσιαστικά τελικές τοπικές μεταβλητές, καθώς και στα μέλη της εξωτερικής κλάσης στην οποία ορίζονται.
- Η περιοχή ορατότητάς τους περιορίζεται στο μπλοκ όπου δηλώνονται.
class Outer { void myMethod() { final int localVar = 5; // Effectively final class LocalInner { void display() { System.out.println("Τοπική μεταβλητή: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Ανώνυμες κλάσεις:
- Χωρίς όνομα τοπικές κλάσεις.
- Δημιουργούνται και δημιουργούνται ταυτόχρονα.
- Συχνά χρησιμοποιούνται για τη δημιουργία υλοποιήσεων διεπαφών ή επέκτασης κλάσεων.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Κάνοντας κάτι ανώνυμα."); } }; anon.doSomething(); } }
Οι βασικές διαφορές μεταξύ στατικών εσωτερικών κλάσεων και εσωτερικών κλάσεων:
| Χαρακτηριστικό | Στατική εσωτερική κλάση | Εσωτερική κλάση |
|---|---|---|
| Λέξη-κλειδί | static |
Δεν υπάρχει |
| Πρόσβαση σε μέλη | Μόνο στατικά μέλη της εξωτερικής | Όλα τα μέλη της εξωτερικής κλάσης |
| Δημιουργία στιγμιότυπου | Χωρίς στιγμιότυπο της εξωτερικής κλάσης | Απαιτείται στιγμιότυπο της εξωτερικής κλάσης |
| Στατικά μέλη | Μπορούν να περιέχουν | Δεν μπορούν (εκτός από σταθερές) |