Middle
Aké sú rozdiely medzi vnorenými (nested) a vnútornými (inner) triedami v Jave?
sobes.tech AI
Odpoveď od AI
-
Vnútorné triedy (Nested classes): Statické členy vonkajšej triedy. Nemajú priamy prístup k nestatickým členom (poliam a metódam) vonkajšej triedy, iba cez inštanciu vonkajšej triedy. Vyhlasujú sa kľúčovým slovom
static. -
Vnútorné triedy (Inner classes): Nestatické členy vonkajšej triedy. Majú úplný prístup ku všetkým členom (statickým aj nestatickým) vonkajšej triedy, vrátane súkromných. Na vytvorenie inštancie vnútorné triedy je potrebná inštancia vonkajšej triedy. Nepoužívajú kľúčové slovo
static.
Príklad:
// Vonkajšia trieda
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statická vnútorná trieda
static class StaticNestedClass {
void display() {
// Prístup iba k statickým členom vonkajšej triedy
System.out.println("Static nested: " + staticOuterField);
// Priamy prístup k outerField nie je možný
// System.out.println(outerField); // Kompilátorská chyba
}
}
// Nestatická vnútorná trieda
class InnerClass {
void display() {
// Prístup ku všetkým členom vonkajšej triedy
System.out.println("Inner: " + outerField);
System.out.println("Inner (static): " + staticOuterField);
}
}
}
// Použitie
public class Main {
public static void main(String[] args) {
// Vytvorenie inštancie statickej vnútorné triedy
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Vytvorenie inštancie vnútorné triedy vyžaduje inštanciu vonkajšej triedy
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Vlastnosť | Vnútorná trieda (Nested Class) | Vnútorná trieda (Inner Class) |
|---|---|---|
| Kľúčové slovo | static |
Nie |
| Prístup k členom vonkajšej triedy | Iba statické | Všetky |
| Vyžaduje inštanciu vonkajšej triedy na vytvorenie inštancie | Nie | Áno |
| Väzba na inštanciu vonkajšej triedy | Nie | Áno |