Sobes.tech
Middle

Šta su ugnježdene klase?

sobes.tech АИ

Одговор од АИ

Ugnježdeni klasa je klasa definisana unutar druge klase.

Vrste ugniježđenih klasa u Javi:

  • Statičke ugniježdene klase (Static Nested Classes):

    • Dostupne su iz spoljašnje klase bez njenog instance.
    • Nemaju pristup nestatičkim poljima i metodama spoljašnje klase direktno.
    • Deklarišu se ključnom rečju static.
  • Unutrašnje klase (Inner Classes):

    • Član-unutrašnje klase (Member Inner Classes):
      • Deklarišu se na nivou članova spoljašnje klase.
      • Imaju pristup svim članovima spoljašnje klase (uključujući privatne).
      • Za kreiranje svog primera zahtevaju instancu spoljašnje klase.
    • Lokalne unutrašnje klase (Local Inner Classes):
      • Definišu se unutar metode, konstruktora ili inicijalizacionog bloka.
      • Vidljive su samo unutar tog metoda/bloka.
      • Imaju pristup final ili efektivno final lokalnim promenljivima spoljašnjeg konteksta.
    • Anonimne unutrašnje klase (Anonymous Inner Classes):
      • Klase bez imena.
      • Koriste se za kreiranje objekata koji odmah implementiraju interfejs ili proširuju klasu.
      • Definišu se i instanciraju u istoj operaciji.

Primer statičke ugniježdene klase:

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

    static class StaticNestedClass {
        public void display() {
            // Može pristupiti statičkim članovima spoljašnje klase
            System.out.println(msg);
        }
    }
}
// Korišćenje
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Primer član-unutrašnje klase:

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

    class InnerClass {
        public void display() {
            // Može pristupiti svim članovima spoljašnje klase
            System.out.println(msg);
        }
    }
}
// Korišćenje
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Prednosti korišćenja ugniježđenih klasa:

  • Grupisanje: Logički povezani klase mogu biti grupisani.
  • Inkapstilacija: Unutrašnje klase mogu imati pristup privatnim članovima spoljašnje klase, obezbeđujući bolju inkapsulaciju.
  • Čitljivost i održavanje: Sakrivaju pomoćne klase unutar glavne klase.
  • Efikasnost: Mogu se koristiti za kreiranje kompaktnih i efikasnih struktura podataka.