Sobes.tech
Middle

Wat zijn de verschillen tussen geneste (nested) en interne (inner) klassen in Java?

sobes.tech AI

Antwoord van AI

  • Geneste klasse (Nested classes): Statische leden van de externe klasse. Hebben geen directe toegang tot de niet-statische leden (velden en methoden) van de externe klasse, alleen via een instantie van de externe klasse. Worden gedeclareerd met het sleutelwoord static.

  • Binnenklassen (Inner classes): Niet-statische leden van de externe klasse. Hebben volledige toegang tot alle leden (statisch en niet-statisch) van de externe klasse, inclusief privéleden. Om een instantie van een binnenklasse te maken, is een instantie van de externe klasse nodig. Ze gebruiken niet het sleutelwoord static.

Voorbeeld:

// Externe klasse
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statische geneste klasse
    static class StaticNestedClass {
        void display() {
            // Alleen toegang tot statische leden van de externe klasse
            System.out.println("Statische geneste klasse: " + staticOuterField);
            // Geen directe toegang tot outerField
            // System.out.println(outerField); // Compileerfout
        }
    }

    // Niet-statische binnenklasse
    class InnerClass {
        void display() {
            // Toegang tot alle leden van de externe klasse
            System.out.println("Binnen: " + outerField);
            System.out.println("Binnen (statisch): " + staticOuterField);
        }
    }
}

// Gebruik
public class Main {
    public static void main(String[] args) {
        // Maak een instantie van de statische geneste klasse
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Maak een instantie van de binnenklasse vereist een instantie van de externe klasse
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Kenmerk Geneste klasse (Nested Class) Binnenklasse (Inner Class)
Sleutelwoord static Nee
Toegang tot leden van de externe klasse Alleen statisch Alles
Vereist een instantie van de externe klasse om een instantie te maken Nee Ja
Verbinding met de instantie van de externe klasse Nee Ja