Sobes.tech
Junior

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

sobes.tech AI

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

Οι εσωτερικές κλάσεις είναι κλάσεις που δηλώνονται μέσα σε μια άλλη κλάση. Διαχωρίζονται σε δύο βασικούς τύπους: στατικές εσωτερικές κλάσεις (στατικά μέλη της κλάσης) και εσωτερικές κλάσεις (μη στατικά μέλη).

Στατικές εσωτερικές κλάσεις:

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

Εσωτερικές κλάσεις:

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

Παραδείγματα χρήσης:

  • Ομαδοποίηση: Οι λογικά σχετιζόμενες κλάσεις μπορούν να ομαδοποιηθούν για βελτίωση της αναγνωσιμότητας και οργάνωσης του κώδικα.
  • Εγκλεισμός: Οι εσωτερικές κλάσεις έχουν πρόσβαση στα ιδιωτικά μέλη της εξωτερικής κλάσης, επιτρέποντας την εγκλεισμό των λεπτομερειών υλοποίησης.
  • Ακροατές συμβάντων (Java): Χρησιμοποιούνται συχνά για τη δημιουργία ανώνυμων εσωτερικών κλάσεων.
  • Βοηθητικές κλάσεις: Μικρές κλάσεις που χρησιμοποιούνται μόνο από την εξωτερική κλάση.
// Παράδειγμα στατικής εσωτερικής κλάσης
class OuterClass {
    static int outerStaticField = 1;
    int outerInstanceField = 2;

    static class StaticNestedClass {
        void display() {
            System.out.println("Εξωτερικό στατικό πεδίο: " + outerStaticField);
            // Δεν μπορεί να προσπελάσει άμεσα το outerInstanceField
        }
    }
}

// Παράδειγμα εσωτερικής κλάσης
class AnotherOuterClass {
    int outerField = 10;

    class InnerClass {
        void display() {
            System.out.println("Εξωτερικό πεδίο: " + outerField); // Πρόσβαση στο πεδίο της εξωτερικής κλάσης
        }
    }
}

Πίνακας σύγκρισης:

Χαρακτηριστικό Στατική εσωτερική κλάση Εσωτερική κλάση
Σχέση Με την εξωτερική κλάση Με ένα στιγμιότυπο της εξωτερικής κλάσης
Πρόσβαση σε εξωτερικά μέλη Μόνο στατικά Όλα τα μέλη (συμπεριλαμβανομένων των ιδιωτικών)
Απαιτείται στιγμιότυπο Όχι Ναι
Μπορεί να περιέχει στατικά μέλη Ναι Όχι (εκτός από σταθερές)