Программалоо тилинде кайсы түрдүү ички класстар бар?
sobes.tech AI
AIден жооп
Javaда ички класстар:
-
Статикалык ички класстар (Static Nested Classes): Алар класстын жөнөкөй статикалык мүчөлөрү сыяктуу иштешет. Алар тышкы класстын статикалык эмес мүчөлөрүнө кире албайт. Тышкы класстын мисалсыз түзүлөт.
public class Outer { private static String staticMsg = "Статикалык билдирүү"; private String instanceMsg = "Мисал билдирүү"; static class StaticNested { void displayStatic() { // Тышкы класстын статикалык мүчөлөрүнө кирүү System.out.println(staticMsg); // Тышкы класстын статикалык эмес мүчөлөрүнө кире албайт // System.out.println(instanceMsg); // Компиляция ката } } } -
Ички класстар (Inner Classes): Тышкы класстын мисалына байланыштуу. Бардык (статикалык жана статикалык эмес) мүчөлөрүнө, анын ичинде жеке мүчөлөрүнө да кире алат.
private,protected,package-privateжеpublicболушу мүмкүн.public class Outer { private static String staticMsg = "Статикалык билдирүү"; private String instanceMsg = "Мисал билдирүү"; class Inner { void display() { // Статикалык жана статикалык эмес мүчөлөрүнө кирүү System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Жергиликтүү класстар (Local Classes): Блоктун ичинде (метод, конструктор же статикалык инициализатор) белгиленет. Бул блоктун ичинде гана колдонулат.
finalже эффективдүүfinalлокалдык өзгөрмөлөргө жана параметрлерге, ошондой эле бардык тышкы мүчөлөргө кайрылышы мүмкүн.public class Outer { private String instanceMsg = "Мисал билдирүү"; void methodWithLocalClass() { final String localVar = "Жергиликтүү өзгөрмө"; // же эффективдүү final class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Анонимдүү класстар (Anonymous Classes): Аты жок локалдык класстар. Алар бир эле учурда классды жарыялап, мисал түзүүгө колдонулат, ал интерфейсти ишке ашырат же класс кеңейтет. Кичинекей, бир жолу колдонулуучу объекттер түзүүдө ыңгайлуу.
public class Outer { void methodWithAnonymousClass() { // Runnable интерфейсин ишке ашыган аноним класс Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Аноним класс аркылуу иштетүү"); } }; new Thread(myRunnable).start(); // Thread классын кеңейткен аноним класс Thread myThread = new Thread() { @Override public void run() { System.out.println("Thread кеңейткен аноним класс аркылуу иштетүү"); } }; myThread.start(); } }
Ички класстардын түрлөрүнүн салыштырылышы:
| Төрү | Жарыялоо жери | Тышкы класстын мүчөлөрүнө кирүү | Түзүү үчүн тышкы класстын мисалы керекпи | Модификаторлор |
|---|---|---|---|---|
| Статикалык ички класс | Класс ичинде, static менен |
Тек гана статикалык | Жок | Бардык |
| Ички класс (Inner) | Класс ичинде (статикалык эмес) | Бардык (статикалык жана статикалык эмес) | Ооба | Бардык |
| Жергиликтүү класс | Блоктун ичинде (метод, конструктор, инициализатор) | Бардык тышкы мүчөлөр + final же эффективдүү final локалдар |
Ооба | Жок (final же abstract автоматтык түрдө) |
| Аноним класс | Блоктун ичинде (баяндама) | Бардык тышкы мүчөлөр + final же эффективдүү final локалдар |
Ооба | Жок |