Sobes.tech
Middle

Кадом намудҳои синфҳои дарунсохт дар забони барномасозӣ мавҷуданд?

sobes.tech AI

Ҷавоб аз AI

Java-да ички синфҳо:

  1. Статик ички синфтар (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); // Компиляция ката
            }
        }
    }
    
  2. Ички класс (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);
            }
        }
    }
    
  3. Жергиликтүү класс (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();
        }
    }
    
  4. Анонимдүү класс (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 локалдарга. Ооба Жок