Middle
Jaké druhy vnořených tříd existují?
sobes.tech AI
Odpověď od AI
Statické vnořené třídy a vnořené třídy (nestatické vnořené třídy).
-
Statické vnořené třídy:
- Deklarují se klíčovým slovem
static. - Mají přístup pouze ke statickým členům (polím a metodám) vnější třídy, včetně soukromých.
- Nemají přímý přístup k nestatickým členům vnější třídy.
- Mohou být vytvořeny bez instance vnější třídy.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Statická proměnná: " + staticVar); // System.out.println("Instance proměnná: " + instanceVar); // Chyba kompilace } } } - Deklarují se klíčovým slovem
-
Vnořené třídy (nestatické vnořené třídy):
- Deklarují se bez klíčového slova
static. - Mají plný přístup ke všem členům (statickým i nestatickým) vnější třídy, včetně soukromých.
- Nemohou obsahovat statické členy (pole nebo metody), kromě konečných konstant.
- Vyžadují instanci vnější třídy pro jejich vytvoření.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Statická proměnná: " + staticVar); System.out.println("Instance proměnná: " + instanceVar); } } } - Deklarují se bez klíčového slova
-
Lokální třídy:
- Deklarují se uvnitř metod, konstruktorů nebo inicializačních bloků.
- Mají přístup ke všem konečným a efektivně konečným lokálním proměnným, stejně jako k členům vnější třídy, ve které jsou definovány.
- Jejich oblast viditelnosti je omezena blokem, ve kterém jsou deklarovány.
class Outer { void myMethod() { final int localVar = 5; // Efektivně final class LocalInner { void display() { System.out.println("Lokální proměnná: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Anonymní třídy:
- Třídy bez jména.
- Vytvářejí se a instanciují současně.
- Často se používají k implementaci rozhraní nebo rozšíření tříd.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Dělá něco anonymně."); } }; anon.doSomething(); } }
Hlavní rozdíly mezi statickými vnořenými třídami a vnořenými třídami:
| Charakteristika | Statická vnořená třída | Vnořená třída |
|---|---|---|
| Klíčové slovo | static |
Není přítomno |
| Přístup k členům | Pouze ke statickým členům vnější třídy | Všechny členy vnější třídy |
| Vytvoření instance | Bez instance vnější třídy | Vyžaduje instanci vnější třídy |