Middle
Koje vrste ugnježdenih klasa postoje?
sobes.tech АИ
Одговор од АИ
Staticke ugneždene klase i unutrašnje klase (nestaticke ugneždene klase).
-
Staticke ugneždene klase:
- Deklarišu se ključnom riječi
static. - Imaju pristup samo statičkim članovima (poljima i metodama) spoljašnje klase, uključujući privatne.
- Nemaju direktan pristup nestatickim članovima spoljašnje klase.
- Mogu biti kreirane bez instance spoljašnje klase.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Staticka varijabla: " + staticVar); // System.out.println("Instance varijabla: " + instanceVar); // Greška pri kompilaciji } } } - Deklarišu se ključnom riječi
-
Unutrašnje klase (nestaticke ugneždene klase):
- Deklarišu se bez ključne riječi
static. - Imaju pun pristup svim članovima (statickim i nestatickim) spoljašnje klase, uključujući privatne.
- Ne mogu sadržavati statičke članove (polja ili metode), osim finalnih konstanti.
- Za njihovo kreiranje je potrebna instanca spoljašnje klase.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Staticka varijabla: " + staticVar); System.out.println("Instance varijabla: " + instanceVar); } } } - Deklarišu se bez ključne riječi
-
Lokalne klase:
- Deklarišu se unutar metoda, konstruktora ili inicijalizacionih blokova.
- Imaju pristup svim finalnim i efektivno finalnim lokalnim promenljivima, kao i članovima spoljašnje klase u kojoj su definisane.
- Opseg njihove vidljivosti je ograničen na blok u kojem su deklarisane.
class Outer { void myMethod() { final int localVar = 5; // Efektivno final class LocalInner { void display() { System.out.println("Lokalna promenljiva: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Anonimne klase:
- Bez imena.
- Kreiraju se i instanciraju istovremeno.
- Često se koriste za kreiranje implementacija interfejsa ili proširenja klasa.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Radi nešto anonimno."); } }; anon.doSomething(); } }
Osnovne razlike između statičkih ugneždenih klasa i unutrašnjih klasa:
| Karakteristika | Statička ugneždena klasa | Unutrašnja klasa |
|---|---|---|
| Ključna riječ | static |
Nema |
| Pristup članovima | Samo do statičkih članova spoljašnje klase | Sve članove spoljašnje klase |
| Kreiranje instance | Bez instance spoljašnje klase | Potreban je primerak spoljašnje klase |