Sobes.tech
Middle

Kādi ir iekšējo klasu veidi?

sobes.tech AI

Atbilde no AI

Statiskās iekšējās un iekšējās (ne statiskās) klases.

  • Statiskās iekšējās klases:

    • Tiek deklarētas ar atslēgvārdu static.
    • Tiek piekļūts tikai statiskajiem locekļiem (laukiem un metodēm) ārējā klasē, ieskaitot privātos.
    • Tieši nav piekļuves pie ne statiskajiem locekļiem ārējā klasē.
    • Var tikt instanciētas bez ārējās klases objekta.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Statiskā mainīgā: " + staticVar);
                // System.out.println("Ne statiskā mainīgā: " + instanceVar); // Kompilācijas kļūda
            }
        }
    }
    
  • Iekšējās (ne statiskās) klases:

    • Apzīmētas bez static atslēgvārda.
    • Tiek nodrošināta pilna piekļuve visiem locekļiem (statiskajiem un ne statiskajiem) ārējā klasē, ieskaitot privātos.
    • Nevar saturēt statiskos locekļus (laukus vai metodes), izņemot galīgās konstantes.
    • Prasa ārējās klases objekta esamību to izveidei.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Statiskā mainīgā: " + staticVar);
                System.out.println("Ne statiskā mainīgā: " + instanceVar);
            }
        }
    }
    
  • Vietējās (lokālās) klases:

    • Apzīmētas metožu, konstruktoru vai inicializācijas bloku iekšpusē.
    • Tiek nodrošināta piekļuve visiem galīgajiem un efektīvi galīgajiem vietējiem mainīgajiem, kā arī ārējās klases locekļiem, kurās tās ir definētas.
    • To redzamības apjoms ir ierobežots ar to bloku, kurā tās ir definētas.
    class Outer {
        void myMethod() {
            final int localVar = 5; // Efektīvi galīgs
    
            class LocalInner {
                void display() {
                    System.out.println("Vietējais mainīgais: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Anonīmās klases:

    • Bezvārdu vietējās klases.
    • Tiek izveidotas un instanciētas uzreiz.
    • Bieži tiek izmantotas interfeisu realizācijai vai klases paplašināšanai.
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Darbojas kaut kas anonīmi.");
                }
            };
            anon.doSomething();
        }
    }
    

Galvenās atšķirības starp statiskajām iekšējām un iekšējām klasēm:

Raksturojums Statiskā iekšējā klase Iekšējā klase
Atslēgvārds static Nav
Piekļuve locekļiem Tikai statiskajiem locekļiem no ārējās klases Visu locekļu no ārējās klases
Objektu izveide Bez ārējās klases objekta Prasa ārējās klases objektu
Statiskie locekļi Var saturēt Nevar saturēt (izņemot konstantes)