Sobes.tech
Middle

Millised on erinevused sisemiste (inner) ja sisemiste (nested) klasside vahel Java-s?

sobes.tech AI

Vastus AI-lt

  • Sisemklassid (Nested classes): Statilised välise klassi liikmed. Ei saa otse ligi mitte-staatilistele liikmetele (välja ja meetoditele) välises klassis, vaid ainult välise klassi eksemplari kaudu. Deklareerivad static märksõnaga.

  • Sisemklassid (Inner classes): Mitte-staatilised välise klassi liikmed. Neil on täielik juurdepääs kõigile liikmetele (staatilised ja mitte-staatilised) välises klassis, kaasa arvatud privaatsed. Siseklassi eksemplari loomiseks on vaja välise klassi eksemplari. Ei kasuta static märksõna.

Näide:

// Välise klass
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Staatiline sisemine klass
    static class StaticNestedClass {
        void display() {
            // Ainult staatiliste liikmete juurdepääs
            System.out.println("Static nested: " + staticOuterField);
            // Otse outerField-ile ligi ei ole
            // System.out.println(outerField); // Kompilatsiooni viga
        }
    }

    // Mitte-staatiline sisemine klass
    class InnerClass {
        void display() {
            // Kõigi liikmete juurdepääs
            System.out.println("Inner: " + outerField);
            System.out.println("Inner (static): " + staticOuterField);
        }
    }
}

// Kasutamine
public class Main {
    public static void main(String[] args) {
        // Staatilise sisemise klassi eksemplar
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Mitte-staatilise sisemise klassi eksemplar
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Omadus Siseklass (Nested Class) Mitte-staatiline klass (Inner Class)
Märksõna static Ei kasutata
Ligipääs välise klassi liikmetele Ainult staatilised Kõik liikmed
Eksemplari loomine Ei ole vajalik Vajalik
Seos välise klassi eksemplariga Ei Jah