Middle
Co jsou to vnořené třídy?
sobes.tech AI
Odpověď od AI
Vnořená třída je třída definovaná uvnitř jiné třídy.
Typy vnořených tříd v Javě:
-
Statické vnořené třídy (Static Nested Classes):
- Přístupné z vnější třídy bez její instance.
- Nemají přímý přístup k nestatickým polím a metodám vnější třídy.
- Deklarují se klíčovým slovem
static.
-
Vnitřní třídy (Inner Classes):
- Členové-vnitřní třídy (Member Inner Classes):
- Deklarují se na úrovni členů vnější třídy.
- Mají přístup ke všem členům vnější třídy (včetně soukromých).
- Vyžadují instanci vnější třídy k vytvoření své instance.
- Lokální vnitřní třídy (Local Inner Classes):
- Definují se uvnitř metody, konstruktoru nebo inicializačního bloku.
- Jsou viditelné pouze v rámci této metody/bloku.
- Mají přístup k lokálním proměnným final nebo efektivně final vnějšího kontextu.
- Anonymní vnitřní třídy (Anonymous Inner Classes):
- Třídy bez jména.
- Používají se k vytvoření objektů, které ihned implementují rozhraní nebo rozšiřují třídu.
- Definují se a instancují v jedné operaci.
- Členové-vnitřní třídy (Member Inner Classes):
Příklad statické vnořené třídy:
class OuterClass {
private static String msg = "Hello from Outer";
static class StaticNestedClass {
public void display() {
// Může získat přístup ke statickým členům vnější třídy
System.out.println(msg);
}
}
}
// Použití
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();
Příklad členové-vnitřní třídy:
class OuterClass {
private String msg = "Hello from Outer";
class InnerClass {
public void display() {
// Může získat přístup ke všem členům vnější třídy
System.out.println(msg);
}
}
}
// Použití
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();
Výhody používání vnořených tříd:
- Skupinování: Logicky související třídy lze seskupit.
- Zapouzdření: Vnitřní třídy mají přístup k soukromým členům vnější třídy, což zlepšuje zapouzdření.
- Čitelnost a údržba: Skrývají pomocné třídy uvnitř hlavní třídy.
- Efektivita: Mohou být použity k vytvoření kompaktnějších a efektivnějších datových struktur.