Junior
Ичке класстар эмне?
sobes.tech AI
AIден жооп
Ичке класстар (nested classes) — башка класс ичинде жарыяланган класстар. Алар статикалык (static nested classes) жана статикалык эмес (inner classes) болушу мүмкүн.
Статикалык ички класстар:
staticмодификатору менен жарыяланат.- Түздөн-түз тышкы класстын статикалык эмес мүчөлөрүнө кире алышпайт (тек тышкы класстын экземпляры аркылуу).
- Статикалык жана статикалык эмес мүчөлөрдү камтышы мүмкүн.
- Тышкы класстын экземплярысыз түзүлөт.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// staticOuterVarга кирүү
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// instanceOuterVarга түздөн-түз кире албайт
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Компиляция ката
// }
}
}
Статикалык ички классты колдонуу:
// Статикалык ички класстын экземплярын түзүү мисалы
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // 10 чыгарат
Ичке класстар (Inner Classes):
staticмодификатору менен жарыяланбайт.- Бардык тышкы класстын мүчөлөрүнө, анын ичинде жеке мүчөлөргө да толук кирүүгө ээ.
- Статикалык мүчөлөрдү (константтарды жыйымга чыгарбай) камтышы мүмкүн эмес.
- Тышкы класстын экземпляры керек.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// staticOuterVar жана instanceOuterVarга кирүү
public void printValues() {
System.out.println(staticOuterVar); // Жеткиликтүү
System.out.println(instanceOuterVar); // Жеткиликтүү
}
}
}
Ички класстын экземплярын түзүү:
// Ички класстын экземплярын түзүү
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // 10 жана 20 чыгарат
Ичке класстарды колдонуу артыкчылыктары:
- Логикалык топтоо: Башка класс тарабынан гана колдонулуучу класстар логикалык түрдө топтолушу мүмкүн.
- Энкапсуляция: Ички класстар тышкы класстын жеке мүчөлөрүнө кире алышат.
- Окумдуулук жана колдоо: Кодду уюштурууну жакшыртат.
Ички класстардын түрлөрү:
- Жергиликтүү класстар: Методдун ичинде жарыяланат.
- Анонимдик класстар: Аты жок класстар, көбүнчө абстракттуу класс, интерфейс же негизги класс үчүн экземпляр түзүүдө колдонулат жана методдорду кайра аныктоого мүмкүндүк берет.
Жергиликтүү класс:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Жергиликтүү класстын ичинде");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Анонимдик класс (интерфейс менен мисал):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Анонимдик класстан салам!");
}
};
anonymousGreeting.sayHello();
}
}