Middle
Qanday ichki sinflar mavjud?
sobes.tech AI
AIdan javob
Java'da Ichki Sinflar (Nested Classes) ikki asosiy turga bo'linadi:
-
Statik Ichki Sinflar (Static Nested Classes)
staticmodifikatori bilan belgilangan.- Oddiy statik a'zo sifatida harakat qiladi.
- Tashqi sinfning statik a'zolariga kirishlari mumkin (hatto ular maxfiy bo'lsa ham).
- Tashqi sinfning statik bo'lmagan a'zolariga to'g'ridan-to'g'ri kirish imkoniyati yo'q.
- Tashqi sinfning nusxasiz yaratiladi:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();.
-
Ichki Sinflar (Inner Classes)
staticbilan belgilangan emas va tashqi sinf nusxasi bilan bog'liq. Ular quyidagilarga bo'linadi:-
A'zo Ichki Sinflar (Member Inner Classes)
- Tashqi sinf a'zosi darajasida, lekin uning metodlaridan tashqarida e'lon qilinadi.
- Tashqi sinfning barcha a'zolariga, jumladan maxfiylariga ham kirish huquqiga ega.
- O'zining nusxasini yaratish uchun tashqi sinf nusxasiga ehtiyoj bor:
OuterClass outerObject = new OuterClass(); OuterClass.MemberInnerClass innerObject = outerObject.new MemberInnerClass();.
-
Mahalliy Sinflar (Local Classes)
- Metodlar, konstruktorlar yoki boshlang'ich bloklar ichida yaratiladi.
- Ularning ko'rinish doirasi ular e'lon qilingan blok bilan cheklangan.
- E'lon qilish uchun
public,private,protectedkabi kirish modifikatorlari bilan bo'lishi mumkin emas. - Tashqi blokdagi
finalyoki amaldafinalbo'lgan mahalliy o'zgaruvchilarga kirishlari mumkin. - Ularni aniqlangan blokdan tashqarida ishlatib bo'lmaydi.
-
Noma'lum Sinflar (Anonymous Classes)
- Aslida, nomi bo'lmagan mahalliy sinflardir.
- Bir vaqtning o'zida e'lon qilinadi va nusxalanadi.
- Ular abstrakt sinf yoki interfeysni "to'g'ridan-to'g'ri" amalga oshirish uchun ishlatiladi.
- Mahalliy sinflar kabi, tashqi blokdagi
finalyoki amaldafinalbo'lgan mahalliy o'zgaruvchilarga kirish huquqiga ega.
-
Struktura misoli:
class OuterClass {
private int outerField;
private static int staticOuterField;
// Statik ichki sinf
static class StaticNestedClass {
void accessOuter() {
// Tashqi sinfning statik a'zolariga kirish mumkin
int value = staticOuterField;
// Statik bo'lmagan a'zolarga kirish mumkin emas
// int value2 = outerField; // Kompilyatsiya xatosi
}
}
// A'zo sinf (Ichki sinf)
class MemberInnerClass {
void accessOuter() {
// Tashqi sinfning barcha a'zolariga kirish mumkin
int value1 = outerField;
int value2 = staticOuterField;
}
}
void methodWithLocalAndAnonymous() {
final int localVar = 10; // final yoki amalda final
// Mahalliy sinf
class LocalClass {
void accessOuter() {
// Tashqi sinf a'zolari va mahalliy final/amalda final o'zgaruvchilarga kirish mumkin
int value1 = outerField;
int value2 = staticOuterField;
int localValue = localVar;
}
}
LocalClass localObj = new LocalClass();
localObj.accessOuter();
// Noma'lum sinf (Runnable ni amalga oshiruvchi)
Runnable anonymousRunnable = new Runnable() {
@Override
public void run() {
// Tashqi sinf a'zolari va mahalliy final/amalda final o'zgaruvchilarga kirish mumkin
int value1 = outerField;
int value2 = staticOuterField;
int localValue = localVar;
System.out.println("Mahalliy o'zgaruvch bilan ishlash: " + localValue);
}
};
anonymousRunnable.run();
}
}