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