Middle
Ce tipuri de clase imbricate există?
sobes.tech AI
Răspuns de la AI
Clase statice înglobate și clase interne (clase înglobate nesatice).
-
Clase statice înglobate:
- Declarate cu cuvântul cheie
static. - Au acces doar la membrii statici (câmpuri și metode) ai clasei externe, inclusiv private.
- Nu au acces direct la membrii nesatice ai clasei externe.
- Pot fi instantiate fără o instanță a clasei externe.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Variabilă statică: " + staticVar); // System.out.println("Variabilă de instanță: " + instanceVar); // Eroare de compilare } } } - Declarate cu cuvântul cheie
-
Clase interne (clase interne nesatice):
- Declarate fără cuvântul cheie
static. - Au acces complet la toate membrii (statice și nesatice) ai clasei externe, inclusiv private.
- Nu pot conține membri statici (câmpuri sau metode), cu excepția constantelor finale.
- Necesită o instanță a clasei externe pentru a fi create.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Variabilă statică: " + staticVar); System.out.println("Variabilă de instanță: " + instanceVar); } } } - Declarate fără cuvântul cheie
-
Clase locale:
- Declarate în interiorul metodelor, constructorilor sau blocurilor de inițializare.
- Au acces la toate variabilele locale finale și efectiv finale, precum și la membrii clasei externe în care sunt definite.
- Domeniul lor de vizibilitate este limitat la blocul în care sunt declarate.
class Outer { void myMethod() { final int localVar = 5; // Final efectiv class LocalInner { void display() { System.out.println("Variabilă locală: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Clase anonime:
- Clase locale fără nume.
- Sunt create și instantiate simultan.
- Sunt adesea folosite pentru a crea implementări ale interfețelor sau pentru a extinde clase.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Fac ceva anonim."); } }; anon.doSomething(); } }
Principalele diferențe între clasele statice înglobate și clasele interne:
| Caracteristică | Clasă internă statică | Clasă internă |
|---|---|---|
| Cuvânt cheie | static |
Absent |
| Acces la membri | Doar la membrii statici ai clasei | Toți membrii clasei externe |
| externe | ||
| Crearea instanței | Fără o instanță a clasei externe | Necesită o instanță a clasei externe |
| Membri statici | Pot conține | Nu pot conține (cu excepția constantelor) |