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 } } } - Apibrėžiamos su raktažodžiu
-
Vidiniai (ne statiniai) klasės:
- Apibrėžiamos be
staticraktaž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); } } } - Apibrėžiamos be
-
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) |