Sobes.tech
Middle

Millised on sisemklasside tüübid?

sobes.tech AI

Vastus AI-lt

Statilised sisemklassid ja sisemklassid (mitte-staatilised sisemklassid).

  • Statilised sisemklassid:

    • Deklareeritakse võtmesõnaga static.
    • Neil on juurdepääs ainult staatilistele liikmetele (väljadele ja meetoditele) välisklassis, kaasa arvatud privaatsed.
    • Neil ei ole otsest juurdepääsu mitte-staatilistele liikmetele välisklassis.
    • Nad võivad olla instantsi loomata ilma välisklassi eksemplarita.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Staatiline muutuja: " + staticVar);
                // System.out.println("Mitte-staatiline muutuja: " + instanceVar); // Kompileerimisviga
            }
        }
    }
    
  • Sisemklassid (mitte-staatilised sisemklassid):

    • Deklareeritakse ilma static võtmesõnata.
    • Neil on täielik juurdepääs kõigile liikmetele (staatilistele ja mitte-staatilistele) välisklassis, kaasa arvatud privaatsed.
    • Nad ei saa sisaldada staatilisi liikmeid (välju või meetodeid), välja arvatud lõplikud konstandid.
    • Nad nõuavad välisklassi eksemplari olemasolu nende loomisel.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Staatiline muutuja: " + staticVar);
                System.out.println("Mitte-staatiline muutuja: " + instanceVar);
            }
        }
    }
    
  • Kohalikud klassid:

    • Deklareeritakse meetodite, konstruktorite või initsialiseerimisblokide sees.
    • Neil on juurdepääs kõigile lõplikule ja efektiivselt lõplikule kohalikele muutujatele ning välisklassi liikmetele, kus nad on defineeritud.
    • Nende nähtavusala on piiratud nende deklareerimisblokiga.
    class Outer {
        void myMethod() {
            final int localVar = 5; // Efektiivselt lõplik
    
            class LocalInner {
                void display() {
                    System.out.println("Kohalik muutuja: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Anonüümklassid:

    • Nimeta kohalikke klasse.
    • Loovad ja instantsi kohe.
    • Sageli kasutatakse liideste või klasside laiendamiseks.
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Tegutseb anonüümselt.");
                }
            };
            anon.doSomething();
        }
    }
    

Peamised erinevused staatiliste sisemklasside ja sisemklasside vahel:

Omadus Staatiline sisemklass Sisemklass
Võtmesõna static Puudub
Juurdepääs liikmetele Ainult staatilistele liikmetele välisklassis Kõigi liikmetele välisklassis
Objekti loomine Ilma välisklassi objekti loomata Vajab välisklassi objekti
Staatilised liikmed Võib sisaldada Ei saa sisaldada (välja arvatud konstantsed)