Sobes.tech
Middle

Kas yra vidinės klasės?

sobes.tech AI

Atsakymas iš AI

Įdėtas klasė yra klasė, apibrėžta kitos klasės viduje.

Java įdėtų klasių tipai:

  • Statinė įdėta klasė (Static Nested Classes):

    • Pasiekiama iš išorinės klasės be jos egzemplioriaus.
    • Neturi tiesioginės prieigos prie nestatinio išorinės klasės lauko ir metodų.
    • Deklaruojama su static raktiniu žodžiu.
  • Vidinės klasės (Inner Classes):

    • Narys-vidinė klasė (Member Inner Classes):
      • Deklaruojama išorinės klasės narių lygyje.
      • Turi prieigą prie visų išorinės klasės narių (įskaitant privačius).
      • Reikalauja išorinės klasės egzemplioriaus savo egzemplioriaus kūrimui.
    • Vietinės vidinės klasės (Local Inner Classes):
      • Apibrėžiamos metodo, konstruktoriaus ar inicializacijos bloko viduje.
      • Matomos tik šio metodo/bloko ribose.
      • Turi prieigą prie final arba efektyviai final vietinių kintamųjų iš išorinės aplinkos.
    • Anoniminės vidinės klasės (Anonymous Inner Classes):
      • Be vardo klasės.
      • Naudojamos objektų kūrimui, kurie iš karto įgyvendina sąsają arba išplečia klasę.
      • Apibrėžiamos ir instancijuojamos vienu veiksmu.

Pavyzdys statinės įdėtos klasės:

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

    static class StaticNestedClass {
        public void display() {
            // Gali pasiekti išorinės klasės statinius narius
            System.out.println(msg);
        }
    }
}
// Naudojimas
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Pavyzdys nario-vidinės klasės:

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

    class InnerClass {
        public void display() {
            // Gali pasiekti visus išorinės klasės narius
            System.out.println(msg);
        }
    }
}
// Naudojimas
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Įdėtų klasių naudojimo privalumai:

  • Grupavimas: Logiškai susijusios klasės gali būti sujungtos.
  • Inkapuliacija: Vidinės klasės gali turėti prieigą prie privačių išorinės klasės narių, užtikrinant geresnę inkapsuliaciją.
  • Skaitomumas ir palaikymas: Paslėpia pagalbines klases pagrindinės klasės viduje.
  • Veiksmingumas: Gali būti naudojamos kuriant kompaktiškesnes ir efektyvesnes duomenų struktūras.