Aké typy vnorených tried existujú v jazyku programovania?
sobes.tech AI
Odpoveď od AI
Vnorené triedy v Jave:
-
Statické vnorené triedy (Static Nested Classes): Správajú sa ako bežné statické členy triedy. Nemajú prístup k nestatickým členom vonkajšej triedy. Sú vytvorené bez inštancie vonkajšej triedy.
public class Outer { private static String staticMsg = "Statická správa"; private String instanceMsg = "Inštančná správa"; static class StaticNested { void displayStatic() { // Prístup k statickým členom vonkajšej triedy System.out.println(staticMsg); // Žiadny prístup k nestatickým členom vonkajšej triedy // System.out.println(instanceMsg); // Chyba kompilácie } } } -
Vnorené triedy (Inner Classes): Sú viazané na inštanciu vonkajšej triedy. Majú úplný prístup ku všetkým (static a non-static) členom vonkajšej triedy, vrátane súkromných. Môžu byť deklarované ako
private,protected,package-privatealebopublic.public class Outer { private static String staticMsg = "Statická správa"; private String instanceMsg = "Inštančná správa"; class Inner { void display() { // Prístup k statickým a nestatickým členom vonkajšej triedy System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Lokálne triedy (Local Classes): Sú deklarované v rámci bloku (metódy, konštruktora alebo statického inicializátora). Sú dostupné iba v rámci tohto bloku. Môžu pristupovať k
finalalebo efektívnefinallokálnym premenným a parametrom bloku, ako aj ku všetkým členom vonkajšej triedy.public class Outer { private String instanceMsg = "Inštančná správa"; void methodWithLocalClass() { final String localVar = "Lokálna premenná"; // alebo efektívne final class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Anonymné triedy (Anonymous Classes): Sú to lokálne triedy bez mena. Používajú sa na súčasné deklarovanie a vytvorenie inštancie triedy, ktorá buď implementuje rozhranie, alebo rozširuje triedu. Sú vhodné na vytváranie malých, jednorazovo použitelných objektov.
public class Outer { void methodWithAnonymousClass() { // Anonymná trieda implementujúca rozhranie Runnable Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Beží z anonymnej triedy"); } }; new Thread(myRunnable).start(); // Anonymná trieda rozširujúca triedu Thread Thread myThread = new Thread() { @Override public void run() { System.out.println("Beží z anonymnej triedy rozširujúcej Thread"); } }; myThread.start(); } }
Porovnanie typov vnorených tried:
| Typ triedy | Miesto deklarácie | Prístup k členom vonkajšej triedy | Potreba inštancie vonkajšej triedy na vytvorenie | Modifikátory prístupu |
|---|---|---|---|---|
| Statická vnorená | Vo vnútri triedy, s kľúčovým slovom static. |
Iba k statickým. | Nie | Všetky |
| Vnorená (Inner) | Vo vnútri triedy (ne statická). | Ku všetkým (statickým aj nestatickým). | Áno | Všetky |
| Lokálna | Vo vnútri bloku (metódy, konštruktory, inicializátory). | Ku všetkým členom vonkajšej + final/efektívne final lokálnym. |
Áno | Nie (final alebo abstract implicitne) |
| Anonymná | Vo vnútri bloku (výraz). | Ku všetkým členom vonkajšej + final/efektívne final lokálnym. |
Áno | Nie |