Sobes.tech
Junior — Middle

Jaka jest różnica między klasą wewnętrzną a klasą zagnieżdżoną w programowaniu?

sobes.tech AI

Odpowiedź od AI

W Javie (i w Androidzie) klasa zagnieżdżona to dowolna klasa zadeklarowana wewnątrz innej klasy. Klasy zagnieżdżone dzielą się na dwa typy:

  1. Statyczna klasa zagnieżdżona (static nested class) — zadeklarowana ze słowem kluczowym static. Nie ma bezpośredniego dostępu do niestatycznych członków klasy zewnętrznej.
  2. Klasa wewnętrzna (inner class) — klasa zagnieżdżona bez modyfikatora static. Jest powiązana z instancją klasy zewnętrznej i ma dostęp do jej niestatycznych pól i metod.

Przykład:

class Outer {
    private int outerField = 10;

    static class StaticNested {
        void print() {
            // Nie można bezpośrednio odwołać się do outerField
            System.out.println("Statyczna klasa zagnieżdżona");
        }
    }

    class Inner {
        void print() {
            // Można odwołać się do outerField
            System.out.println("Klasa wewnętrzna, outerField = " + outerField);
        }
    }
}

Główna różnica polega na tym, że klasa wewnętrzna jest powiązana z obiektem klasy zewnętrznej i może odwoływać się do jej niestatycznych członków, podczas gdy klasa statyczna zagnieżdżona nie może tego robić.