Dasturlash tilida qanday ichki sinflar mavjud?
sobes.tech AI
AIdan javob
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 калит сўзи билан. |
Фақат статикларга. | Йўқ | Ҳаммаси |
| Ички класс | Статик эмас, класс ичида. | Ҳаммасига (статик ва статик эмас). | Ҳа | Ҳаммаси |
| Локал класс | Метод, конструктор ёки инициализатор ичида. | Ташқи класснинг барча аъзолари + final ёки эффектли final локал ўзгарувчилар. |
Ҳаммаси | Йўқ (final ёки abstract автоматик) |
| Аноним класс | Ички блокда (ifода). | Ташқи класснинг барча аъзолари + final ёки эффектли final локал ўзгарувчилар. |
Ҳаммаси | Йўқ |