Sobes.tech
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