Middle
Aké druhy vnorených tried existujú?
sobes.tech AI
Odpoveď od AI
Statické vnorené triedy a vnorené triedy (nestatické vnorené triedy).
-
Statické vnorené triedy:
- Vyhlasujú sa kľúčovým slovom
static. - Majú prístup iba k statickým členom (poliam a metódam) vonkajšej triedy, vrátane súkromných.
- Nemajú priame prístup k nestatickým členom vonkajšej triedy.
- Môžu byť vytvorené bez inštancie vonkajšej triedy.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Statická premenná: " + staticVar); // System.out.println("Inštančná premenná: " + instanceVar); // Chyba kompilácie } } } - Vyhlasujú sa kľúčovým slovom
-
Vnorené triedy (nestatické vnorené triedy):
- Vyhlasujú sa bez kľúčového slova
static. - Majú plný prístup ku všetkým členom (statickým aj nestatickým) vonkajšej triedy, vrátane súkromných.
- Nemôžu obsahovať statické členy (polia alebo metódy), okrem konečných konštánt.
- Vyžadujú inštanciu vonkajšej triedy na ich vytvorenie.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Statická premenná: " + staticVar); System.out.println("Inštančná premenná: " + instanceVar); } } } - Vyhlasujú sa bez kľúčového slova
-
Lokálne triedy:
- Vyhlasujú sa v rámci metód, konštruktorov alebo inicializačných blokov.
- Majú prístup ku všetkým konečným a efektívne konečným lokálnym premenným, ako aj k členom vonkajšej triedy, v ktorej sú definované.
- Ich oblasť viditeľnosti je obmedzená na blok, v ktorom sú deklarované.
class Outer { void myMethod() { final int localVar = 5; // Efektívne final class LocalInner { void display() { System.out.println("Lokálna premenná: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Neklasové triedy (anonymous classes):
- Bez mena.
- Sú vytvárané a inštancované súčasne.
- Často sa používajú na implementáciu rozhraní alebo rozšírenie tried.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Robí niečo anonymne."); } }; anon.doSomething(); } }
Hlavné rozdiely medzi statickými vnorenými triedami a vnorenými triedami:
| Charakteristika | Statická vnorená trieda | Vnorená trieda |
|---|---|---|
| Kľúčové slovo | static |
Není prítomné |
| Prístup k členom | Iba k statickým členom vonkajšej triedy | Všetky členy vonkajšej triedy |
| Vytvorenie inštancie | Bez inštancie vonkajšej triedy | Vyžaduje sa inštancia vonkajšej triedy |