Middle
Care sunt diferențele dintre clasele imbricate (nested) și clasele interne (inner) în Java?
sobes.tech AI
Răspuns de la AI
-
Clase imbricate (Nested classes): Membri statici ai clasei externe. Nu au acces direct la membrii non-staționari (câmpuri și metode) ai clasei externe, doar printr-o instanță a clasei externe. Sunt declarate cu cuvântul cheie
static. -
Clase interne (Inner classes): Membri non-staționari ai clasei externe. Au acces complet la toți membrii (statice și non-statice) ai clasei externe, inclusiv cei privați. Pentru a crea o instanță a unei clase interne, este necesară o instanță a clasei externe. Nu folosesc cuvântul cheie
static.
Exemplu:
// Clasa externă
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Clasă imbricată statică
static class StaticNestedClass {
void display() {
// Acces doar la membrii statici ai clasei externe
System.out.println("Clase imbricate statice: " + staticOuterField);
// Fără acces direct la outerField
// System.out.println(outerField); // Eroare de compilare
}
}
// Clasă internă non-staționară
class InnerClass {
void display() {
// Acces la toți membrii clasei externe
System.out.println("Interne: " + outerField);
System.out.println("Interne (static): " + staticOuterField);
}
}
}
// Utilizare
public class Main {
public static void main(String[] args) {
// Crearea unei instanțe a clasei imbricate statice
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Crearea unei instanțe a clasei interne necesită o instanță a clasei externe
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Caracteristică | Clasa imbricată (Nested Class) | Clasa internă (Inner Class) |
|---|---|---|
| Cuvânt cheie | static |
Nu |
| Acces la membrii clasei externe | Doar statici | Toți |
| Necesită o instanță a clasei externe pentru a crea o instanță | Nu | Da |
| Legătură cu instanța clasei externe | Nu | Da |