Sobes.tech
Middle

Ce sunt clasele imbricate?

sobes.tech AI

Răspuns de la AI

O clasă imbricată este o clasă definită în interiorul altei clase.

Tipuri de clase imbricate în Java:

  • Clase imbricate statice (Static Nested Classes):

    • Accesibile din clasa externă fără instanța acesteia.
    • Nu au acces direct la câmpurile și metodele non-statice ale clasei externe.
    • Sunt declarate cu cuvântul cheie static.
  • Clase interne (Inner Classes):

    • Clase membre interne (Member Inner Classes):
      • Sunt declarate la nivelul membrilor clasei externe.
      • Au acces la toate membrii clasei externe (inclusiv cei privați).
      • Necesită o instanță a clasei externe pentru a-și crea propria instanță.
    • Clase interne locale (Local Inner Classes):
      • Sunt definite în interiorul unei metode, constructor sau bloc de inițializare.
      • Sunt vizibile doar în interiorul acestei metode/bloc.
      • Au acces la variabile locale finale sau efectiv finale din contextul extern.
    • Clase anonime interne (Anonymous Inner Classes):
      • Clase fără nume.
      • Sunt utilizate pentru a crea obiecte care implementează imediat o interfață sau extind o clasă.
      • Sunt definite și instantiate într-o singură operație.

Exemplu de clasă imbricată statică:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Poate accesa membrii statici ai clasei externe
            System.out.println(msg);
        }
    }
}
// Utilizare
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Exemplu de clasă internă membru:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Poate accesa toți membrii clasei externe
            System.out.println(msg);
        }
    }
}
// Utilizare
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Avantajele utilizării claselor imbricate:

  • Grupare: Clasele logic legate pot fi grupate.
  • Încapsulare: Clasele interne pot avea acces la membrii privați ai clasei externe, îmbunătățind încapsularea.
  • Citibilitate și întreținere: Ascund clasele auxiliare în interiorul clasei principale.
  • Eficiență: Pot fi folosite pentru a crea structuri de date mai compacte și eficiente.