Sobes.tech
Middle

Mik a különbségek a beágyazott (nested) és a belső (inner) osztályok között Java-ban?

sobes.tech MI

Válasz az MI-től

  • Beágyazott osztályok (Nested classes): A külső osztály statikus tagjai. Nincs közvetlen hozzáférésük a nem statikus tagokhoz (mezők és metódusok) a külső osztályban, csak a külső osztály példányán keresztül. A static kulcsszóval vannak deklarálva.

  • Belső osztályok (Inner classes): A külső osztály nem statikus tagjai. Teljes hozzáférést biztosítanak minden taghoz (statisztikus és nem statikus), beleértve a privátakat is. Egy belső osztály példányának létrehozásához szükség van a külső osztály példányára. Nem használják a static kulcsszót.

Példa:

// Külső osztály
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statikus beágyazott osztály
    static class StaticNestedClass {
        void display() {
            // Csak a külső osztály statikus tagjaihoz fér hozzá
            System.out.println("Statikus beágyazott: " + staticOuterField);
            // Nincs közvetlen hozzáférés az outerField-hez
            // System.out.println(outerField); // Fordítási hiba
        }
    }

    // Nem statikus belső osztály
    class InnerClass {
        void display() {
            // Minden külső osztály taghoz hozzáfér
            System.out.println("Belső: " + outerField);
            System.out.println("Belső (statikus): " + staticOuterField);
        }
    }
}

// Használat
public class Main {
    public static void main(String[] args) {
        // Statikus belső osztály példányának létrehozása
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Belső osztály példányának létrehozása külső osztály példányát igényli
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Jellemző Beágyazott osztály (Nested Class) Belső osztály (Inner Class)
Kulcsszó static Nem
Hozzáférés a külső osztály tagjaihoz Csak statikusak Minden
Külső osztály példánya nélkül példányosítható? Nem Igen
Kapcsolat a külső osztály példányával Nem Igen