Кадом намудҳои синфҳои дарунсохт дар забони барномасозӣ мавҷуданд?
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) | Класс ичинде (статикалык эмес). | Бардык (статикалык жана нестатикалык). | Ооба | Бардык |
| Жергиликтүү класс (Local) | Блоктун ичинде (метод, конструктор, инициализация). | Бардык сырткы мүчөлөргө + final/эффективдүү final локалдарга. |
Ооба | Жок (final же abstract автоматтык түрдө) |
| Аноним класс | Блоктун ичинде (баяндама). | Бардык сырткы мүчөлөргө + final/эффективдүү final локалдарга. |
Ооба | Жок |