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 aleboprivate. - 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 aleboprivate. - 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 |