Middle
Ποια είναι η διαφορά μεταξύ των εσωτερικών (nested) και των εσωτερικών (inner) κλάσεων στη Java;
sobes.tech AI
Απάντηση από AI
-
Εσωτερικές κλάσεις (Nested classes): Στατικά μέλη της εξωτερικής κλάσης. Δεν έχουν άμεση πρόσβαση στα μη στατικά μέλη (πεδία και μεθόδους) της εξωτερικής κλάσης, μόνο μέσω ενός δείκτη της εξωτερικής κλάσης. Δηλώνονται με τη λέξη-κλειδί
static. -
Εσωτερικές κλάσεις (Inner classes): Μη στατικά μέλη της εξωτερικής κλάσης. Έχουν πλήρη πρόσβαση σε όλα τα μέλη (στατικά και μη στατικά) της εξωτερικής κλάσης, συμπεριλαμβανομένων των ιδιωτικών. Για τη δημιουργία μιας εσωτερικής κλάσης χρειάζεται ένα δείκτη της εξωτερικής κλάσης. Δεν χρησιμοποιούν τη λέξη-κλειδί
static.
Παράδειγμα:
// Εξωτερική κλάση
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Στατική εσωτερική κλάση
static class StaticNestedClass {
void display() {
// Πρόσβαση μόνο σε στατικά μέλη της εξωτερικής κλάσης
System.out.println("Στατική εσωτερική: " + staticOuterField);
// Δεν υπάρχει άμεση πρόσβαση στο outerField
// System.out.println(outerField); // Σφάλμα μεταγλώττισης
}
}
// Μη στατική εσωτερική κλάση
class InnerClass {
void display() {
// Πρόσβαση σε όλα τα μέλη της εξωτερικής κλάσης
System.out.println("Εσωτερική: " + outerField);
System.out.println("Εσωτερική (στατική): " + staticOuterField);
}
}
}
// Χρήση
public class Main {
public static void main(String[] args) {
// Δημιουργία δείκτη στατικής εσωτερικής κλάσης
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Δημιουργία δείκτη εσωτερικής κλάσης απαιτεί δείκτη της εξωτερικής κλάσης
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Χαρακτηριστικό | Εσωτερική κλάση (Nested Class) | Εσωτερική κλάση (Inner Class) |
|---|---|---|
| Λέξη-κλειδί | static |
Όχι |
| Πρόσβαση στα μέλη της εξωτερικής κλάσης | Μόνο στατικά | Όλα |
| Απαιτείται δείκτης της εξωτερικής κλάσης για δημιουργία δείκτη | Όχι | Ναι |
| Σύνδεση με τον δείκτη της εξωτερικής κλάσης | Όχι | Ναι |