У програмском језику Јава, када је класадефинисана унутар друге класе, тада се таква класа назива угнијежђена класа или унутарња класа. Гнездене класе су јединствена карактеристика Јаве која је укључена још од јдк1.1. Увек запамтите, ова функционалност гнежђења је однос само између класа, а не између Јава објеката. Раније смо говорили о томе како инстантирати променљиву инстанцу у Јави, а сада ћемо погледати како инстанцирати интерну класу на Јави.
Како инсталирати интерну класу - угнијежђена класа на Јави
- Врсте угнијежђених класа
- Нестатично
- Статички
- Приступите модификаторима за угнијежђене или унутрашње класе
- Карактеристике класе гнездења
- Предности
- Пример узорка, објашњење кода и излаз
Врсте угнијежђених класа на Јави
Нестатична гнездана класа
Нестатичне угнијежђене класе називамо унутрашњим класама. Има приступ свим подацима примера своје класе, укључујући приватна поља и методе.
Синтакса
[modifiers] class OuterClassName { code... [modifiers] class InnerClassName { code.... } }
Стварање
<OuterClassName> outerObj = new <OuterClassName>(arguments); <OuterClassName>.<InnerClassName> innerObj = outerObj.new <InnerClassName> (arguments);
Својства
- Вањска класа (класа која садржи унутрашњу класу) може створити онолико бројева предмета унутрашње класе колико жели, унутар свог кода.
- Ако је унутрашња класа јавна, а садржи и класа, код у некој другој неповезаној класи такође може створити инстанцу унутрашње класе.
- Ниједан предмет унутарње класе се аутоматски не инстанцира са објектом вањске класе.
- Код унутрашње класе има бесплатан приступ свимаелементи објекта спољне класе који га садрже, по имену (без обзира на ниво приступа елементима), ако унутрашња класа има променљиву са истим именом, променљивој спољној класи може се приступити овако:
<ОутерЦлассНаме> .то. <варијаблеНаме> - Вањска класа може назвати чак и приватне методе унутрашње класе.
- Објект унутрашње класе мора бити повезан са инстанцом вањске класе.
Статичка гнездана класа
Уграђене класе које су проглашене статичким називају се само статичким угнијежђеним класама. Статичка класа нема приступ подацима специфичним за инстанцу.
Синтакса
<access-specifier> class OuterClassName { public static class <StaticInnerClassName> { code. . . } code . . . }
Стварање
<OuterClassName>.<InnerClassName> innerObj = new <OuterClassName>.<InnerClassName>(arguments);
Својства
- За статичку унутрашњу класу, онда се статичка унутрашња класа може инстанцирати без инструмената спољне класе.
- Статички припадници вањске класе су видљиви статичкој унутрашњој класи, без обзира на њихов ниво приступа.
- Нестатични чланови спољне класе нису доступни, јер не постоји ниједна примера спољне класе.
- Унутрашња класа можда нема статичке чланове осим ако унутрашња класа није сама означена као статична.
- Понекад се статичке угнијежђене класе уопће не називају унутрашњом класом, јер за њих није потребна инстанца вањске класе.
- Статичка унутрашња класа је баш попут било које друге унутрашње класе, али нема референцу на свој објект спољне класе који ју је створио.
Приступите модификаторима за угнијежђене или унутрашње класе
- јавни
- заштићено
- приватно
- Уобичајено
Карактеристике класе гнездења
Објекат унутрашње класе има имплицитнореференца на предмет вањске класе који га је инстанцирао. Кроз овај показивач добија приступ било којој варијабли спољног објекта. Само статичке унутрашње класе немају тај показивач, али могу приступити свим статичким члановима само користећи име спољне класе. Заправо је невидљиво када пишемо код, али преводилац води рачуна о томе. Унутрашње класе су заправо феномен преводиоца, а не ЈВМ. Ова функција чини Јава класе унутрашњим класама богатијом и кориснијом.
Предности угнијежђене класе
- То је начин логичког груписања класа које се користе само на једном месту.
- Повећава енкапсулацију.
- Гнездене класе могу довести до читљивијег и одрживог кода.
- Логично груписање часова - Ако постоји класакорисно само једној другој класи, онда је логично да је уграђујете у ту класу и држите их заједно. Гнездење попут „класе помоћника“ чини њихов пакет поједностављеним.
- Повећана енкапсулација - Размотрите два највиша нивоакласе, А и Б, где је Б потребан приступ члановима А који би се у противном прогласили приватним. Сакривањем класе Б унутар класе А, чланови А могу бити приватни, али Б им може приступити. Такође, и сам Б може бити сакривен од спољашњег света.
Програм 1
/* within the scope of outer class */ class Outer{ int var1 = 2; int var2 = 3; /* Inner Class */ class Inner{ void add(){ System.out.println("Addition is:"+(var1+var2)); } } void show(){ Inner in = new Inner(); in.add(); } } class NestedClassDemo{ public static void main(String args[]){ Outer out = new Outer(); out.show(); } }
Излаз 1
Програм 2
/* Outside the scope of outer class */ class Outer{ int var1 = 2; int var2 = 3; /* Inner Class */ class Inner{ void add(){ System.out.println("Addition is:"+(var1+var2)); } } } class NestedClassDemo1{ public static void main(String args[]){ Outer.Inner in = new Outer().new Inner(); in.add(); } }
Излаз 2
Објашњење кода и излаза
У првом програму инстанцирали смо угнијежђену класу Иннер на начин који је декларисан унутар вањске класе, тј.
у домену спољне класе. Посебно ћемо иницирати унутрашње класе у домену спољне класе. Унутрашња класа је приватна јер знамо да приватни чланови неће бити доступни изван оквира те класе који садржи приватне чланове.
У другом програму инстанцирали смо угнијежђену класу Иннер изван опсега вањске класе. Чини се да је синтакса тешка, али није тако. Сувише је лако:
Размотрићемо ову изјаву на два:
Outer out = new Outer(); Outer.Inner in = out.new Inner();
Прво морамо да направимо објекат за спољашњукласа. Тада ћемо креирати објект за унутарњу класу, јер је унутрашња класа члан вањске класе, тако да морамо унутарњу класу препознати јединствено, што се може учинити са Спољашњи. Унутрашњи тада морамо креирати објект који ради нови оператор, а затим конструктор те класе. Иста ствар се ради овде.
Фласх упаљен
Након компилације угнијежђене класе, биће генерисане две .цласс датотеке са Оутер.цласс и Оутер $ Иннер.цласс (овде је класа Иннер унутар класе Вањска).
Погледајте више корисних водича и дефинитивних смерница о Јава програмирању.
Коментари