Sobes.tech
Middle

Kāda ir atšķirība starp iekšējām (inner) un iekšējām (nested) klasēm Java?

sobes.tech AI

Atbilde no AI

  • Iekšējās klases (Nested classes): Statiskie ārējās klases locekļi. Tie tieši nepiekrīt nestatiskajiem locekļiem (laukiem un metodēm) ārējā klasē, tikai caur ārējās klases eksemplāru. Deklarē ar atslēgvārdu static.

  • Iekšējās klases (Inner classes): Nestatiskie ārējās klases locekļi. Tiem ir pilna piekļuve visiem locekļiem (statiskajiem un nestatiskajiem) ārējā klasē, ieskaitot privātos. Lai izveidotu iekšējo klasi, nepieciešams ārējās klases eksemplārs. Nepieciešams nelietot static.

Piemērs:

// Ārējā klase
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statiskā iekšējā klase
    static class StaticNestedClass {
        void display() {
            // Pieeja tikai pie statiskajiem locekļiem
            System.out.println("Static nested: " + staticOuterField);
            // Tieša pieeja outerField nav iespējama
            // System.out.println(outerField); // Kompilācijas kļūda
        }
    }

    // Nestatiskā iekšējā klase
    class InnerClass {
        void display() {
            // Pieeja visiem ārējās klases locekļiem
            System.out.println("Inner: " + outerField);
            System.out.println("Inner (static): " + staticOuterField);
        }
    }
}

// Lietošana
public class Main {
    public static void main(String[] args) {
        // Statiskās iekšējās klases eksemplāra izveide
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Iekšējās klases eksemplāra izveide prasa ārējās klases eksemplāru
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Īpašība Iekšējā klase (Nested Class) Iekšējā klase (Inner Class)
Atslēgvārds static Nav
Piekļuve ārējās klases locekļiem Tikai statiskie Visi
Eksemplāra izveide Nav nepieciešama Nepieciešama
Saistība ar ārējās klases eksemplāru Nav Ir