В езика за програмиране на Java, когато е класдефиниран в друг клас, тогава такъв клас се нарича вложен клас или вътрешен клас. Вложени класове са уникална функция на Java, която е включена от jdk1.1. Винаги помнете, че тази функционалност за влагане е връзка само между класове, а не между Java обекти. Преди сме говорили за това как да инстанцираме променлива на екземпляра в Java, а сега ще разгледаме как да създадете вътрешен клас в Java.
Как да инсталирате вътрешен клас - вложен клас в Java
- Видове вложени класове
- Нестатичен
- статичен
- Достъп Модификатори за вложени или вътрешни класове
- Характеристики на вложен клас
- Предимства
- Примерен код, обяснение на код и изход
Видове вложени класове в Java
Нестатичен вложен клас
Нестатичните вложени класове се наричат вътрешни класове. Той има достъп до всички данни за екземпляри от своя приложен клас, включително частни полета и методи.
Синтаксис
[modifiers] class OuterClassName { code... [modifiers] class InnerClassName { code.... } }
създаване
<OuterClassName> outerObj = new <OuterClassName>(arguments); <OuterClassName>.<InnerClassName> innerObj = outerObj.new <InnerClassName> (arguments);
Имоти
- Външният клас (класът, съдържащ вътрешния клас), може да създаде толкова много обекти на вътрешния клас, колкото желае, вътре в своя код.
- Ако вътрешният клас е публичен, а съдържащият клас също, тогава кодът в някой друг несвързан клас може също да създаде инстанция на вътрешния клас.
- Никакви обекти от вътрешен клас не се автоматично създават с външен обект от клас.
- Кодът на вътрешния клас има безплатен достъп до всичкиелементи на обекта на външния клас, който го съдържа, по име (без значение какво е нивото на достъп на елементите), ако вътрешният клас има променлива със същото име, тогава променливата на външния клас може да бъде достъпна така:
<OuterClassName> .Това. <VariableName> - Външният клас може да извиква дори частните методи на вътрешния клас.
- Обектът на вътрешния клас трябва да бъде асоцииран с екземпляр от външния клас.
Статичен вложен клас
Вложени класове, които са декларирани статични, просто се наричат статични вложени класове. Статичният клас няма достъп до специфични за отделните данни данни.
Синтаксис
<access-specifier> class OuterClassName { public static class <StaticInnerClassName> { code. . . } code . . . }
създаване
<OuterClassName>.<InnerClassName> innerObj = new <OuterClassName>.<InnerClassName>(arguments);
Имоти
- За статичен вътрешен клас, тогава статичният вътрешен клас може да бъде инстанциран без екземпляр от външен клас.
- Статичните членове на външния клас са видими за статичния вътрешен клас, каквото и да е нивото им на достъп.
- Нестатичните членове на външния клас не са налични, тъй като няма екземпляр на външния клас.
- Вътрешният клас може да няма статични членове, освен ако самият вътрешен клас не е маркиран като статичен.
- Понякога статичните вложени класове изобщо не се наричат вътрешен клас, тъй като не изискват инстанция на външен клас.
- Статичният вътрешен клас е също като всеки друг вътрешен клас, но той няма препратка към външния му обект, който го е генерирал.
Достъп Модификатори за вложени или вътрешни класове
- обществен
- защитени
- частен
- по подразбиране
Характеристики на вложен клас
Обект от вътрешен клас има неявнопозоваване на обекта от външния клас, който го е създал. Чрез този указател той получава достъп до всяка променлива на външния обект. Само статичните вътрешни класове нямат този указател, но имат достъп до всички статични членове само с помощта на името на външния клас. Всъщност той е невидим, когато пишем кода, но компилаторът се грижи за него. Вътрешните класове всъщност са явление на компилатора, а не на JVM. Тази функция прави вътрешните класове на Java по-богати и по-полезни.
Предимства на вложен клас
- Това е начин за логично групиране на класове, които се използват само на едно място.
- Увеличава капсулирането.
- Вложени класове могат да доведат до по-четим и поддържаем код.
- Логическо групиране на класове - Ако клас еполезен само за един друг клас, тогава е логично да го вградите в този клас и да държите двата заедно. Влагането като „класове помощници“ прави пакета им по-рационализиран.
- Повишена капсулация - Помислете за две най-високо нивокласове, A и B, където B се нуждае от достъп до членове на A, които иначе биха били обявени за частни. Скривайки клас B в клас A, членовете на A могат да бъдат частни, но B могат да имат достъп до тях. Също така, самата B може да бъде скрита от външния свят.
Програма 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
Обяснение на код и изход
В първата програма сме инстанцирали вложен клас Inner в метод, деклариран в рамките на външния клас, т.е.
в обхвата на външния клас. Специално ще създадем вътрешни класове в обхвата на външния клас. Вътрешният клас е Private, тъй като знаем, че частните членове няма да бъдат достъпни извън обхвата на този клас, съдържащ частни членове.
Във втората програма сме инстанцирали вложен клас Inner извън обхвата на външния клас. Синтаксисът изглежда труден, но не е така. Това е твърде лесно:
Ще разбием това твърдение на две:
Outer out = new Outer(); Outer.Inner in = out.new Inner();
Първо, трябва да създадем обект за външнотоклас. Тогава ще създадем обект за класа Вътрешен, тъй като Вътрешният клас е членът на Външния клас, така че трябва да разпознаем Вътрешния клас еднозначно, може да се направи с Външна. Атрешна тогава трябва да създадем обекта, който се прави от нов оператор, последван от конструктора на този конкретен клас. Същото нещо е направено и тук.
Светкавицата е включена
След компилиране на вложен клас, два .class файла ще бъдат генерирани с Outer.class и Outer $ Inner.class (тук клас Inner е вътре в клас Outer).
Проверете още полезни уроци и окончателни указания за програмиране на Java.
Коментари