Middle
Кайсы ички класстардын түрлөрү бар?
sobes.tech AI
AIден жооп
Javaда ички класстар (Nested Classes) негизинен эки негизги түргө бөлүнөт:
-
Статикалык ички класстар (Static Nested Classes)
staticмодификатору менен белгиленет.- жөнөкөй статикалык мүчөлөр сыяктуу иштешет.
- тышкы класстын статикалык мүчөлөрүнө кире алышат (жеке болсо да).
- тышкы класстын статикалык эмес мүчөлөрүнө түздөн-түз кире алышпайт.
- тышкы класстын экземплярын түзбөстөн түзүлөт:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();.
-
Ички класстар (Inner Classes)
Ички класстар
staticмодификатору жок жана тышкы класстын экземплярына байланыштуу. Алар бөлүнөт:-
Мүчө-klassтар (Member Inner Classes)
- тышкы класстын мүчөсү катары жарыяланат, бирок анын методдорунан тышкары.
- бардык тышкы класстын мүчөлөрүнө, анын ичинде жеке мүчөлөрүнө да кире алышат.
- тышкы класстын экземплярын талап кылат:
OuterClass outerObject = new OuterClass(); OuterClass.MemberInnerClass innerObject = outerObject.new MemberInnerClass();.
-
Жергиликтүү класстар (Local Classes)
- методдордун, конструкторлордун же инит-блоктордун ичинде түзүлөт.
- алардын көрүнүү чеги ошол блок менен чектелет.
- жеткиликтүү мүчөлөргө (public, private, protected) ээ болбойт.
- тышкы блоктун
finalже effectivelyfinalлокалдык өзгөрмөлөрүнө кире алат. - алардын колдонулушу ошол блок менен чектелет.
-
Анонимдүү класстар (Anonymous Classes)
- негизинен, аты жок жергиликтүү класстар.
- бир эле учурда жарыяланат жана инстанцыланат.
- абстракттык класс же интерфейсти "жасалма" түрдө ишке ашыруу үчүн колдонулат.
- ошондой эле жергиликтүү класстар сыяктуу,
finalже effectivelyfinalлокалдык өзгөрмөлөргө кире алат.
Структуранын мисалы:
-
class OuterClass {
private int outerField;
private static int staticOuterField;
// Статикалык ички класс
static class StaticNestedClass {
void accessOuter() {
// Тышкы класстын статикалык мүчөлөрүнө кире алат
int value = staticOuterField;
// Тышкы класстын статикалык эмес мүчөлөрүнө кире албайт
// int value2 = outerField; // Компиляция ката
}
}
// Мүчө-klass (Ички класс)
class MemberInnerClass {
void accessOuter() {
// Бардык мүчөлөргө кире алат
int value1 = outerField;
int value2 = staticOuterField;
}
}
void methodWithLocalAndAnonymous() {
final int localVar = 10; // эффективдүү final
// Жергиликтүү класс
class LocalClass {
void accessOuter() {
// Бардык мүчөлөргө жана жергиликтүү final/effectively final өзгөрмөлөргө кире алат
int value1 = outerField;
int value2 = staticOuterField;
int localValue = localVar;
}
}
LocalClass localObj = new LocalClass();
localObj.accessOuter();
// Анонимдүү класс (Runnable интерфейсин ишке ашыруу)
Runnable anonymousRunnable = new Runnable() {
@Override
public void run() {
// Бардык мүчөлөргө жана жергиликтүү final/effectively final өзгөрмөлөргө кире алат
int value1 = outerField;
int value2 = staticOuterField;
int localValue = localVar;
System.out.println("Running with local variable: " + localValue);
}
};
anonymousRunnable.run();
}
}