Middle
Ichki sinflar haqida va ular qachon qo'llanilishini aytib bering.
sobes.tech AI
AIdan javob
Java ichki sinflar (Nested Classes) boshqa sinf ichida belgilangan sinflardir. Ular ikki turga bo'linadi: statik (Static Nested Classes) va ichki sinflar (Inner Classes).
Statik ichki sinflar
staticmodifikatori bilan e'lon qilinadi.- Tashqi sinfning faqat statik a'zolariga (hatto yashirilganlariga) kirish huquqiga ega.
- Tashqi sinfning niestatik a'zolariga kirish huquqi yo'q.
- Statik ichki sinfning nusxasini yaratish uchun tashqi sinf nusxasi kerak emas:
// Tashqi sinf class Outer { static int outerStaticField; int outerInstanceField; // Statik ichki sinf static class StaticNested { void accessOuter() { // Tashqi sinfning statik maydoniga kirish System.out.println(Outer.outerStaticField); // outerInstanceField ga kirish yo'q // System.out.println(outerInstanceField); // Kompilyatsiya xatosi } } } // Statik ichki sinfdan foydalanish class Main { public static void main(String[] args) { Outer.StaticNested nestedObject = new Outer.StaticNested(); nestedObject.accessOuter(); } }
Ichki sinflar
staticmodifikatori bilan e'lon qilinmaydi.- Tashqi sinfning barcha a'zolariga (statik va niestatik, hatto yashirilganlariga) to'liq kirish huquqiga ega.
- Ichki sinf nusxasini yaratish uchun tashqi sinf nusxasi kerak.
- Tashqi sinf nusxasiga bog'liq:
// Tashqi sinf class Outer { static int outerStaticField; int outerInstanceField; // Ichki sinf class Inner { void accessOuter() { // Tashqi sinfning statik maydoniga kirish System.out.println(Outer.outerStaticField); // Tashqi sinfning niestatik maydoniga kirish System.out.println(outerInstanceField); } } } // Ichki sinfdan foydalanish class Main { public static void main(String[] args) { Outer outerObject = new Outer(); Outer.Inner innerObject = outerObject.new Inner(); innerObject.accessOuter(); } }
Ichki sinflar quyidagilarga bo'linadi:
- Oddiy ichki sinflar: Tashqi sinf ichida to'g'ridan-to'g'ri aniqlangan.
- Mahalliy ichki sinflar: Metodlar, konstruktorlar yoki initsializatsiya bloklari ichida aniqlanadi va faqat shu blok doirasida ko'rinadi.
class Outer { void display() { class LocalInner { // Mahalliy ichki sinf void message() { System.out.println("Mahalliy ichki sinf"); } } LocalInner obj = new LocalInner(); obj.message(); } } - Nomsiz ichki sinflar: Nomsiz sinflar bo'lib, sinf yoki interfeys nusxasini yaratish uchun ishlatiladi va ularni darhol amalga oshirish uchun taqdim etiladi. Ko'pincha voqea kuzatuvchilar bilan ishlatiladi.
interface Greeting { void sayHello(); } class Main { public static void main(String[] args) { Greeting greeting = new Greeting() { // Nomsiz ichki sinf @Override public void sayHello() { System.out.println("Salom!"); } }; greeting.sayHello(); } }
Qachon ichki sinflar qo'llaniladi:
- Mantiqiy guruhlash: Agar sinf faqat boshqa sinfning bir qismi bo'lsa va ularni birga guruhlash ma'noga ega bo'lsa. Bu kodni o'qishni va qo'llab-quvvatlashni yaxshilaydi.
- Encapsulation: Ichki sinflar tashqi sinf a'zolariga kirish huquqiga ega bo'lishi mumkin, bu esa yanada yaqin bog'liqlik va amalga oshirish tafsilotlarini yashirish imkonini beradi.
- Yaxshiroq kod: Kichik, oddiy sinf faqat bir joyda ishlatiladigan bo'lsa, uning ichiga joylash kodni tozaroq qilishi mumkin.
- Resurslardan samarali foydalanish: Ichki sinflar tashqi sinf a'zolariga kirishni ta'minlaydi, bu esa kodni soddalashtirishi mumkin. Misol uchun, iteratorlarni amalga oshirish.
- Interfeyslarni amalga oshirish yoki sinflarni kengaytirish kontekstida: Nomsiz ichki sinflar ko'pincha interfeyslar yoki abstrakt sinflarning qisqa amalga oshirilishini taqdim etish uchun ishlatiladi.
- Amalga oshirishni yashirish: Sinfni boshqa sinf ichida yashirish, uni tashqaridan ko'rinmas qilish.
Statik va ichki sinflar taqqosoti:
| Parametr | Statik ichki sinf | Ichki sinf |
|---|---|---|
static modifikatori |
Ha | Yo'q |
| Tashqi sinf a'zolariga kirish | Faqat statik (hatto private) | Barcha a'zolar (statik va niestatik, private) |
| Tashqi sinf nusxasini yaratish uchun | Yo'q | Ha |
| Tashqi sinf bilan bog'liqlik | Yo'q | Ha |
Tanlov statik ichki sinf yoki ichki sinf o'rtasida tashqi sinfga bog'liq bo'lib, niestatik a'zolarga kirish kerakmi yoki yo'qligiga qarab amalga oshiriladi. Agar kerak bo'lsa, ichki sinfni tanlang. Agar yo'q bo'lsa, statik ichki sinf — yanada mos keladi, chunki u tashqi sinf nusxasi bilan bog'liq emas va samaraliroq bo'lishi mumkin.