Koje vrste ugnježdenih klasa postoje u jeziku programiranja?
sobes.tech АИ
Одговор од АИ
Ugnježdene klase u Javi:
-
Statičke ugnježdene klase (Static Nested Classes): Ponašaju se kao obični statički članovi klase. Nemaju pristup nestatičkim članovima spoljašnje klase. Kreiraju se bez instance spoljašnje klase.
public class Outer { private static String staticMsg = "Staticka poruka"; private String instanceMsg = "Poruka instance"; static class StaticNested { void displayStatic() { // Pristup statičkim članovima spoljašnje klase System.out.println(staticMsg); // Nema pristupa nestatičkim članovima spoljašnje klase // System.out.println(instanceMsg); // Greška pri kompilaciji } } } -
Unutrašnje klase (Inner Classes): Povezane su sa instancom spoljašnje klase. Imaju pun pristup svim (statičkim i nestatičkim) članovima spoljašnje klase, uključujući privatne. Mogu biti deklarisane kao
private,protected,package-privateilipublic.public class Outer { private static String staticMsg = "Staticka poruka"; private String instanceMsg = "Poruka instance"; class Inner { void display() { // Pristup statičkim i nestatičkim članovima System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Lokalne klase (Local Classes): Deklarišu se unutar bloka (metoda, konstruktora ili statičkog inicijalizatora). Dostupne su samo unutar tog bloka. Mogu referisati na
finalili efektivnofinallokalne promenljive i parametre, kao i na sve članove spoljašnje klase.public class Outer { private String instanceMsg = "Poruka instance"; void methodWithLocalClass() { final String localVar = "Lokalna promenljiva"; // ili efektivno final class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Anonimne klase (Anonymous Classes): Klase bez imena. Koriste se za istovremeno deklarisanje i kreiranje instance klase koja implementira interfejs ili proširuje klasu. Pogodne su za pravljenje malih, jednokratnih objekata.
public class Outer { void methodWithAnonymousClass() { // Anonimna klasa koja implementira interfejs Runnable Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Pokreće se iz anonimne klase"); } }; new Thread(myRunnable).start(); // Anonimna klasa koja proširuje klasu Thread Thread myThread = new Thread() { @Override public void run() { System.out.println("Pokreće se iz anonimne klase koja proširuje Thread"); } }; myThread.start(); } }
Uporedba vrsta ugniježđenih klasa:
| Tip klase | Mesto deklaracije | Pristup članovima spoljašnje klase | Potreban je primerak spoljašnje klase za kreiranje | Modifikatori pristupa |
|---|---|---|---|---|
| Statička ugniježđena klasa | Unutar klase, sa ključnom rečju static. |
Samo do statičkih. | Ne | Sve |
| Unutrašnja klasa | Unutar klase (ne-statička). | Do svih (statičkih i nestatičkih) članova. | Da | Sve |
| Lokalna klasa | Unutar bloka (metoda, konstruktora, inicijalizatora). | Do svih članova spoljašnje klase + final ili efektivno final lokalnih promenljivih i parametara. |
Da | Ne (final ili abstract implicitno) |
| Anonimna klasa | Unutar bloka (izraza). | Do svih članova spoljašnje klase + final ili efektivno final lokalnih promenljivih i parametara. |
Da | Ne |