Sobes.tech
Middle

Kokie yra įterptųjų klasių tipai?

sobes.tech AI

Atsakymas iš AI

Statiniai vidiniai ir vidiniai (ne statiniai) klasės.

  • Statinės vidinės klasės:

    • Apibrėžiamos su raktažodžiu static.
    • Turi prieigą tik prie statinių narių (kintamųjų ir metodų) išorinėje klasėje, įskaitant privačius.
    • Tiesiogiai neturi prieigos prie ne statinių narių išorinėje klasėje.
    • Gali būti instancijuotos be išorinės klasės objekto.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Statinis kintamasis: " + staticVar);
                // System.out.println("Ne statinis kintamasis: " + instanceVar); // Kompiliacijos klaida
            }
        }
    }
    
  • Vidiniai (ne statiniai) klasės:

    • Apibrėžiamos be static raktažodžio.
    • Turi pilną prieigą prie visų narių (statinių ir ne statinių) išorinėje klasėje, įskaitant privačius.
    • Negali turėti statinių narių (kintamųjų ar metodų), išskyrus galutines konstantas.
    • Reikalauja išorinės klasės objekto egzistavimo jų sukūrimui.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Statinis kintamasis: " + staticVar);
                System.out.println("Ne statinis kintamasis: " + instanceVar);
            }
        }
    }
    
  • Vietiniai (lokaliniai) klasės:

    • Apibrėžiamos metodų, konstruktorių ar inicializacijos blokų viduje.
    • Turi prieigą prie visų galutinių ir efektyviai galutinių vietinių kintamųjų, taip pat prie išorinės klasės narių, kuriose jos apibrėžtos.
    • Jų matomumo sritis yra ribota to bloko, kuriame jos apibrėžtos.
    class Outer {
        void myMethod() {
            final int localVar = 5; // Efektyviai galutinis
    
            class LocalInner {
                void display() {
                    System.out.println("Vietinis kintamasis: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Anoniminės klasės:

    • Bevardės vietinės klasės.
    • Sukuriamos ir instancijuojamos iš karto.
    • Dažnai naudojamos interfeisų įgyvendinimui ar klasių išplėtimui.
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Atliekama kažkas anonimiškai.");
                }
            };
            anon.doSomething();
        }
    }
    

Pagrindiniai skirtumai tarp statinių vidinių ir vidinių klasių:

Savybė Statinė vidinė klasė Vidinė klasė
Raktažodis static Nėra
Prieiga prie narių Tik prie statinių narių iš išorinės klasės Visų narių iš išorinės klasės
Nuo ko kuriamas Be išorinės klasės objekto Reikalauja išorinės klasės objekto
Statiniai nariai Gali turėti Negali (išskyrus konstantas)