Junior
Ichki sinflar nima?
sobes.tech AI
AIdan javob
Ichki sinflar (nested classes) — bu boshqa sinf ichida e'lon qilingan sinflar. Ular statik (static nested classes) yoki statik bo'lmagan (inner classes) bo'lishi mumkin.
Statik ichki sinflar:
staticmodifikatori bilan e'lon qilinadi.- Tashqi sinfning statik bo'lmagan a'zolariga to'g'ridan-to'g'ri kirish imkoniga ega emaslar (faqat tashqi sinf nusxasi orqali).
- Statik va statik bo'lmagan a'zolarni o'z ichiga olishi mumkin.
- Tashqi sinf nusxasidan mustaqil ravishda yaratiladi.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// staticOuterVar ga kirish imkoniyati bor
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// instanceOuterVar ga to'g'ridan-to'g'ri kirish imkoniyati yo'q
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Kompilyatsiya xatosi
// }
}
}
Statik ichki sinfdan foydalanish:
// Statik ichki sinf nusxasini yaratish misoli
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // 10 ni chiqaradi
Ichki sinflar (Inner Classes):
staticbilan e'lon qilinmaydi.- Tashqi sinfning barcha a'zolariga, jumladan maxfiylariga ham to'liq kirish imkoniyatiga ega.
- Statik a'zolarni o'z ichiga olmaydi (faqat kompilyatsiya vaqti konstantalarini hisobga olmaganda).
- Yaratilishi uchun tashqi sinf nusxasi kerak.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// staticOuterVar va instanceOuterVar ga kirish imkoniyati bor
public void printValues() {
System.out.println(staticOuterVar); // Mavjud
System.out.println(instanceOuterVar); // Mavjud
}
}
}
Inner sinfdan foydalanish:
// Inner sinf nusxasini yaratish misoli
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // 10 va 20 ni chiqaradi
Ichki sinflardan foydalanishning afzalliklari:
- Mantiqiy guruhlash: Faqat boshqa sinf tomonidan ishlatiladigan sinflar ichida mantiqiy tarzda guruhlanishi mumkin.
- Encapsulation: Ichki sinflar, tashqi sinfning maxfiy a'zolariga kirish huquqiga ega.
- O'qilishi va saqlashni osonlashtirish: Kod yanada tartibli bo'ladi.
Statik bo'lmagan ichki sinf turlari:
- Mahalliy sinflar: Metod ichida e'lon qilinadi.
- Noma'lum sinflar (Anonymous classes): Aniq nomi bo'lmagan sinflar, odatda, abstrakt sinf, interfeys yoki bazaviy sinfning nusxasini yaratish va metodlarni qayta yozish uchun ishlatiladi.
Mahalliy sinf:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Mahalliy sinf ichida");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Noma'lum sinf (interfeys bilan misol):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Noma'lum sinfdan salom!");
}
};
anonymousGreeting.sayHello();
}
}