ПредишенСледващото

Вместен клас е член на класа, в който е вграден. Вътрешни класове имат достъп до членовете на класа, в който са инвестирани, дори и ако тези условия са обявени с частни модификатори. За да направите това, компилаторът създава специална методи за достъп до тези области, така че самата виртуална машина не е в нарушение на принципите на ООП.

Като членове на класа на вложени класове могат да бъдат обявени с частния ключова дума. защитени. обществен достъп или без модификатор (пакет-частно).

Външно клас (OuterClass) могат да бъдат публични или пакет-частно само!

Защо да използвате вложени класове

Причините за използване на вложени класове в Java:

  • Логическите класове групиране, които се използват само на едно място. Ако класът се използва само един друг клас, че има смисъл да го сложите в класа да покаже връзката им.
  • Увеличаването на капсулиране. Ако клас Б се прилага за членове на клас А. които иначе биха били обявени за частна. има смисъл да се инвестира клас Б към клас А. като има предвид тези членове могат да бъдат обявени за частни. но B може да има достъп до тях. В допълнение, B може да бъде скрит от външния свят.
  • Облекчение чете и поддържа код. Малките класове могат да бъдат вградени във външните класове, по-близо до мястото на употреба.

Статичните вложени класове

Статичните вложени класове са свързани с външната своя клас, както и методи и променливи.

И както и статични методи, те не могат да имат достъп до инстанция променливи и например методите на външния клас, в който са инвестирани директно, те могат да се отнасят до тях само чрез позоваване на обект. След препратка към предмета, които се отнасят до член на инстанция на външния клас, независимо от техния модификатор за достъп.

Статичните вложени класове имат достъп до статични членове на класа, в който са вградени, с която и модификатори за достъп.

Тези вътрешни класове обикновено са обикновено логически свързани с външната своя клас. Те имат достъп до всички области на външния клас. Случаите на тези класове могат да бъдат установени в рамките на външния клас, и ако достатъчно ниво на достъп, други класове в други пакети.

Non-статични вложени класове, които са членове на клас могат да бъдат обявени с някой от модификатора лично. защитени. публична или без модификатор (пакет-частно).

местни класове

Местен клас е клас, който не е член на друг клас, а има име.

Местните класове не могат да имат каквито и да било модификатори за достъп: не лично. нито защитени. нито публично.

анонимен израз клас се състои от:

  • нова операция.
  • име на интерфейса за продажба или родител клас. Този пример използва MyInterface интерфейс.
  • Скоби с аргументи на суперкласа строителя. Друг анонимен клас не може да обяви в тялото му на нови дизайнери, тъй като тя не разполага с име.
  • Тялото на класа.

Друг анонимен клас никога не може да бъде абстрактна (абстрактни класове ще бъдат обсъдени по-късно).

Друг анонимен клас винаги е имплицитно окончателно.

Анонимни класове могат да имат достъп на променливите на метода, в който са декларирани, ако тези променливи са обявени за окончателно. или те са на крайния акт, който не е променил.

сенки променливи

Ако името на променливата във всяка област има същото име като на променливата в дворовете, то това променливите сенки (сянка) на променлива външното поле. Вие не можете да за означаване на променливата от външния региона просто по име. Примерът по-долу показва как да получите достъп до сенки променлива:

В този пример, методът на параметъра х method1 замъглява SecondInnerClass страните клас. и х от х SecondInnerClass нюанси на FirstInnerClass. и X на X в FirstInnerClass затваря ShadowClass съответно.

Имайте предвид, препратката към х от различни нива на въвеждане на класове (Това. Х. Това. X. SecondInnerClass. X).

Lambda Expressions

Често анонимен клас изпълнява интерфейс, който съдържа само един абстрактен метод. В този случай, можете да напишете код още по-кратко и ясно, ако използвате израз ламбда.

Интерфейсът, който съдържа само един абстрактен метод, наречен функционален интерфейс. Функционалната интерфейс може също да включва всякакъв брой статични методи и методи подразбиране. -Подробно интерфейси ще бъдат обсъдени в съответната статия.

Ламбда експресия се състои от:

  1. Списък на формални параметри, разделени със запетаи и оградена в скоби. Ако официалната параметър е само един, скобите могат да бъдат пропуснати. Ако не са налице формални параметри, а след това се използва само празни квадратни скоби. Вид на официалните оператори може да бъде определен, но не е задължително.
  2. Token стрелка ->.
  3. Тялото се състои от един-единствен оператор / инструкция или блок от изявления / инструкции. В случай на блок от изявления и резултатите от метода, различна от празнотата да върне стойност, използвайте връщането на ключови думи. В случай, че в резултат на експресията на експресия ламбда е резултат от този израз. единица оператор може да бъде празно.

Това ще бъде грешка компилация, защото променливата х вече е обявен в района.

Тип резултат в израз ламбда ще бъде това, което се очаква в този момент, така че ламбда изрази могат да се използват само когато Java компилаторът може да определи своя тип:

Lambda изрази могат да бъдат сериализирани, ако неговите аргументи и резултатът се осъществяват серийно, но така стриктно не се препоръчва.

Някои от Java пакет функционални интерфейси. Util. функция:

потребител - един метод включва един обект като параметър на метода без резултат.

функция - един метод включва един обект като параметър, който се връща друг обект като резултат.

предикат - един метод включва обект като параметър, който се връща в резултат на булева.

доставчик - включва метод без параметри, която връща обекта.

Връзки към методи

Ако израз ламбда, извършва се обадя само определен метод или конструктор, можете да използвате препратката към метода вместо.

Кога да използвате вложени класове, местни класове, анонимни класове, lambdas

Използвайте местните класове. Ако искате да създадете повече от една инстанция на клас, използвайте строителя или възнамеряват да се въведе нов тип на име.

Използвайте анонимни класове. ако трябва да се добави поле или допълнителни методи.

Използването на ламбда изрази. ако имате нужда от едно копие на функционален интерфейс, или ако ще да прехвърли едно действие на друг метод, като манипулатор на събитие.

Използвайте вложени клас. ако имате същите изисквания като за местен клас, но искате да го направи по-широко достъпна. Ако имате нужда от достъп до променливите на външния клас, използвайте нестатичен вложени клас (вътрешни класове), в противен случай се използва неподвижен вложени клас.

Още записи от този раздел:

Много е трудно, но е възможно. Само че е необходимо да се спирам на това начинаещ или по-добре да се върне тук тогава? (Знам, че AsctionScript 3)
=
Друг важен момент: Чел съм, че вътрешните класове са тясно свързани със събитията в Java. В тази глава и дума за това. И наистина в списъка на статии за Java няма такава статия «Java 8 събития."
Въпреки, че може би аз не разбирам правилно.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!