Middle
Jaké jsou rozdíly mezi vnořenými (nested) a vnitřními (inner) třídami v Javě?
sobes.tech AI
Odpověď od AI
-
Vnořené třídy (Nested classes): Statické členy vnější třídy. Nem mají přímý přístup k nestatickým členům (polím a metodám) vnější třídy, pouze přes instanci vnější třídy. Jsou deklarovány klíčovým slovem
static. -
Vnitřní třídy (Inner classes): Nestatické členy vnější třídy. Mají plný přístup ke všem členům (statickým i nestatickým) vnější třídy, včetně soukromých. Pro vytvoření instance vnitřní třídy je potřeba instance vnější třídy. Nepoužívají klíčové slovo
static.
Příklad:
// Vnější třída
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statická vnořená třída
static class StaticNestedClass {
void display() {
// Přístup pouze ke statickým členům vnější třídy
System.out.println("Statická vnořená: " + staticOuterField);
// Přímý přístup k outerField není možný
// System.out.println(outerField); // Chyba kompilace
}
}
// Nestatická vnitřní třída
class InnerClass {
void display() {
// Přístup ke všem členům vnější třídy
System.out.println("Vnitřní: " + outerField);
System.out.println("Vnitřní (statická): " + staticOuterField);
}
}
}
// Použití
public class Main {
public static void main(String[] args) {
// Vytvoření instance statické vnořené třídy
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Vytvoření instance vnitřní třídy vyžaduje instanci vnější třídy
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Vlastnost | Vnořená třída (Nested Class) | Vnitřní třída (Inner Class) |
|---|---|---|
| Klíčové slovo | static |
Ne |
| Přístup k členům vnější třídy | Pouze statické | Všechno |
| Vyžaduje instanci vnější třídy pro vytvoření | Ne | Ano |
| Vazba s instancí vnější třídy | Ne | Ano |