Sobes.tech
Middle

Aké sú vlastnosti používania statických a vnorených vnútorných tried v Jave? V čom spočíva ich rozdiel?

sobes.tech AI

Odpoveď od AI

Statické vnorené triedy (static nested classes):

  • Nemajú nejasnú referenciu na inštanciu vonkajšej triedy.
  • Môžu sa obracať iba na statické členy vonkajšej triedy (polia a metódy, vrátane súkromných).
  • Vytvárajú sa pomocou kľúčového slova static.
  • Môžu byť deklarované ako public, protected, package-private alebo private.
  • Používajú sa na skupinovanie pomocných tried, ktoré nie sú závislé od konkrétnej inštancie vonkajšej triedy.

Príklad:

class Outer {
    private static String staticField = "Static Outer";
    private String instanceField = "Instance Outer";

    static class StaticNested {
        void display() {
            // Prístup iba k statickým členom Outer
            System.out.println(staticField);
            // Chyba: Nie je prístup k instanceField
            // System.out.println(instanceField); 
        }
    }
}

Vnorené vnorené triedy (inner classes):

  • Majú nejasnú referenciu na inštanciu vonkajšej triedy.
  • Môžu sa obracať na všetky členy vonkajšej triedy (statičné aj nestatičné, vrátane súkromných).
  • Vytvárajú sa bez kľúčového slova static.
  • Môžu byť deklarované ako public, protected, package-private alebo private.
  • Používajú sa na vytváranie tesne súvisiacich pomocných tried, ktorým je potrebný prístup k členom inštancie vonkajšej triedy.

Príklad:

class Outer {
    private static String staticField = "Static Outer";
    private String instanceField = "Instance Outer";

    class Inner {
        void display() {
            // Prístup ku všetkým členom Outer
            System.out.println(staticField);
            System.out.println(instanceField);
        }
    }
}

Rozdiel:

Osobitnosť Statická vnorená trieda Vnorená trieda
Nejasná referencia na vonkajší raz Nie Áno
Prístup k členom vonkajšej triedy Iba statické Statické a nestatické
Použitie static Áno Nie
Väzba na inštanciu vonkajšej triedy Nie Áno
Použitie Pomocné triedy bez závislosti od inštancie Pomocné triedy so závislosťou od inštancie