Sobes.tech
Middle

Kuo skiriasi įterptos (nested) ir vidinės (inner) klasės Java?

sobes.tech AI

Atsakymas iš AI

  • Vidinės klasės (Nested classes): Statiniai išorinės klasės nariai. Neturi tiesioginės prieigos prie nestatinių narių (kintamųjų ir metodų) išorinėje klasėje, tik per išorinės klasės egzempliorių. Deklaruojamos su raktiniu žodžiu static.

  • Vidinės klasės (Inner classes): Nestatinių išorinės klasės nariai. Turi pilną prieigą prie visų narių (statinių ir nestatinių) išorinėje klasėje, įskaitant privačius. Norint sukurti vidinės klasės egzempliorių, reikalingas išorinės klasės egzempliorius. Nenaudoja static žodžio.

Pavyzdys:

// Išorinė klasė
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statinė vidinė klasė
    static class StaticNestedClass {
        void display() {
            // Prieiga tik prie statinių narių
            System.out.println("Static nested: " + staticOuterField);
            // Tiesioginis prieigos prie outerField nėra
            // System.out.println(outerField); // Klaidų kompiliuojant
        }
    }

    // Nestatinių vidinių klasių pavyzdys
    class InnerClass {
        void display() {
            // Prieiga prie visų išorinės klasės narių
            System.out.println("Inner: " + outerField);
            System.out.println("Inner (static): " + staticOuterField);
        }
    }
}

// Naudojimas:
public class Main {
    public static void main(String[] args) {
        // Statinės vidinės klasės egzemplioriaus kūrimas
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Nestatinių klasių egzempliorių kūrimas reikalauja išorinės klasės egzemplioriaus
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Savybė Vidinė klasė (Nested Class) Nestatinių klasių (Inner Class)
Raktinis žodis static Nėra
Prieiga prie išorinės klasės narių Tik statiniai Visi
Egzemplioriaus kūrimas Nereikalingas Reikalingas
Ryšys su išorine klase Nėra Yra