Sobes.tech
Middle

Τι είναι οι εσωτερικές κλάσεις;

sobes.tech AI

Απάντηση από AI

Μια εσωτερική κλάση είναι μια κλάση που ορίζεται μέσα σε μια άλλη κλάση.

Τύποι εσωτερικών κλάσεων στη Java:

  • Στατικές εσωτερικές κλάσεις (Static Nested Classes):

    • Προσβάσιμες από την εξωτερική κλάση χωρίς το στιγμιότυπό της.
    • Δεν έχουν άμεση πρόσβαση στα μη στατικά πεδία και μεθόδους της εξωτερικής κλάσης.
    • Δηλώνονται με τη λέξη-κλειδί static.
  • Εσωτερικές κλάσεις (Inner Classes):

    • Μέλη-εσωτερικές κλάσεις (Member Inner Classes):
      • Δηλώνονται σε επίπεδο μελών της εξωτερικής κλάσης.
      • Έχουν πρόσβαση σε όλα τα μέλη της εξωτερικής κλάσης (συμπεριλαμβανομένων των ιδιωτικών).
      • Απαιτούν ένα στιγμιότυπο της εξωτερικής κλάσης για τη δημιουργία του δικού τους στιγμιότυπου.
    • Τοπικές εσωτερικές κλάσεις (Local Inner Classes):
      • Ορίζονται μέσα σε μια μέθοδο, κατασκευαστή ή μπλοκ αρχικοποίησης.
      • Είναι ορατές μόνο εντός αυτής της μεθόδου/μπλοκ.
      • Έχουν πρόσβαση σε τοπικές μεταβλητές που είναι final ή αποτελεσματικά final στο εξωτερικό πλαίσιο.
    • Ανώνυμες εσωτερικές κλάσεις (Anonymous Inner Classes):
      • Κλάσεις χωρίς όνομα.
      • Χρησιμοποιούνται για τη δημιουργία αντικειμένων που υλοποιούν άμεσα μια διεπαφή ή επεκτείνουν μια κλάση.
      • Ορίζονται και δημιουργούνται σε μια ενιαία ενέργεια.

Παράδειγμα στατικής εσωτερικής κλάσης:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Μπορεί να έχει πρόσβαση σε στατικά μέλη της εξωτερικής κλάσης
            System.out.println(msg);
        }
    }
}
// Χρήση
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Παράδειγμα μέλους-εσωτερικής κλάσης:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Μπορεί να έχει πρόσβαση σε όλα τα μέλη της εξωτερικής κλάσης
            System.out.println(msg);
        }
    }
}
// Χρήση
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Πλεονεκτήματα της χρήσης εσωτερικών κλάσεων:

  • Ομαδοποίηση: Οι λογικά σχετικές κλάσεις μπορούν να ομαδοποιηθούν.
  • Ενθυλάκωση: Οι εσωτερικές κλάσεις μπορούν να έχουν πρόσβαση σε ιδιωτικά μέλη της εξωτερικής κλάσης, βελτιώνοντας την ενθυλάκωση.
  • Αναγνωσιμότητα και συντήρηση: Κρύβουν βοηθητικές κλάσεις μέσα στην κύρια κλάση.
  • Αποτελεσματικότητα: Μπορούν να χρησιμοποιηθούν για τη δημιουργία πιο συμπαγών και αποδοτικών δομών δεδομένων.