Inner Class v Javě / doposud jsme věděli, že členy třídy jsou proměnné, metody, konstruktory a bloky inicializátoru.
je však také možné mít třídu nebo rozhraní jako člen třídy.
třída deklarovaná uvnitř jiné třídy je v Javě známá jako vnořené třídy. Rozsah vnořené třídy je vázán rozsahem její uzavřené třídy (vnější třída).
pokud je tedy třída B definována uvnitř třídy a, pak třída B nemůže existovat samostatně bez třídy A. zde je třída A vnější nebo uzavřená třída A třída B je vnořená třída.
vnořená třída v Javě má přístup k členům (včetně soukromých členů) své uzavřené třídy. Uzavřená třída však nemá přístup k členům vnořené třídy.
třída, která je členem jiné třídy, může být statická nebo nestatická. Jinými slovy, v Javě existují dva typy vnořených tříd: statické a nestatické.
třída členů, která je deklarována statickým modifikátorem, je v Javě známá jako statická vnořená třída.
třída členů, která není statická, je známá jako vnitřní třída nebo nestatická vnořená třída. Je to nejdůležitější typ vnořené třídy.
v tomto tutoriálu se naučíme pouze vnitřní třídu v Javě. Později budeme diskutovat o statické vnořené třídě v dalším tutoriálu.
Inner class v Javě
inner class v Javě je třída, která je deklarována uvnitř jiné třídy bez statického modifikátoru. To je také běžně známé jako non-statické vnořené třídy v Javě. Má přístup ke všem členům (proměnným a metodám) své vnější třídy.
vnitřní třída nemůže mít žádné statické členy. Členy vnitřní třídy java mohou být:
- proměnné Instance
- metody Instance
- konstruktory
- blok inicializátoru
- vnitřní třída
syntaxe vnitřní třídy
access modifier class OuterClassName { . . . . . . . . . . access modifier class InnerClassName { // Members of the inner class. } // Other members of the outer class.}For example:public class Test { // Here, Test is an outer class. . . . . . . // Inner class public class A { // A is inner class as a member of its outer class. . . . . } }
třída, která drží vnitřní třídu, se nazývá uzavřená nebo vnější třída. Uzavřovací třída je třída nejvyšší úrovně, zatímco vnitřní třída je členem vnější třídy.
vztah mezi vnější třídou a vnitřní třídou představuje vztah Has-a. Vztah Has-a vytváří vztah mezi dvěma třídami. To je také známé jako složení nebo agregace v Javě.
když je vnitřní třída uzavřenou třídou pro jinou vnitřní třídu, nazývá se vnoření vnitřních tříd. Neexistuje žádný limit pro hnízdění vnitřních tříd.
ve které verzi byla inner class zavedena v Javě?
inner class byla zavedena ve verzi Java 1.1 bez jakýchkoli změn v JVM používaném pro zpracování souborů třídy. Je kompletně implementován pomocí kompilátoru Java.
Java compiler generuje samostatný soubor třídy dot pro každou vnitřní třídu s názvem Outer$Inner.třídy a pro vnější třídu s názvem vnější.třída. Například vnitřní třída A je zkompilována do třídního testu s názvem Test$A.class.
pokud nějaký název souboru třídy dot obsahuje uprostřed symbol“$“, zobrazí soubor vnitřní třídy. Formát souborů třídy pro vnitřní třídy má stejný formát jako soubory třídy pro vnější třídy.
proto JVM zachází se soubory tříd pro vnitřní třídy a vnější třídy stejně.
vlastnosti vnitřní třídy
existuje několik důležitých vlastností vnitřní třídy, které jsou následující:
1. Vnitřní třída může mít stejný název jako vnější třída.
2. Rozsah vnitřní třídy je ohraničen rozsahem její vnější třídy.
3. Bez existujícího objektu nebo instance vnější třídy nebude žádná šance na existující objekt vnitřní třídy.
4. Vnitřní třída může přímo přistupovat ke všem proměnným a metodám vnější třídy, včetně soukromých.
5. Protože vnitřní třída je řádným členem vnější třídy stejně jako deklarované proměnné a metody ve třídě.
proto můžeme použít všechny modifikátory přístupu java, jako jsou veřejné, výchozí, chráněné a soukromé, na vnitřní třídu podobné ostatním členům třídy. Vnější nebo normální třída však nemůže být soukromá nebo chráněná.
6. Pokud je název proměnné vnitřní třídy stejný jako název proměnné vnější třídy, můžeme přistupovat k proměnné vnější třídy takto. Vnější třída.Tata.VariableName; zde to představuje aktuální objekt vnější třídy.
7. Java inner class je skryta před jinou třídou ve své uzavřené třídě. Proto poskytuje bezpečnostní mechanismus v aplikačním programu a snižuje čitelnost (porozumění) programu.
8. Objekt vnitřní třídy je často vytvořen ve své vnější třídě a nemůže být vytvořen z jiných tříd.
9. Objekty vnější třídy i vnitřní třídy jsou vytvářeny v samostatných paměťových místech.
syntaxe pro vytvoření objektu vnitřní třídy v Javě
instance vnitřní třídy sdílí vztah s instancí vnější třídy. Tento vztah je takový, že nemůžeme vytvořit instanci vnitřní třídy, aniž bychom měli instanci vnější třídy.
Chcete-li tedy vytvořit objekt vnitřní třídy, musíte nejprve vytvořit objekt vnější třídy, který se připojí k vnitřní třídě. Můžeme vytvořit více objektů vnitřní třídy pro stejnou instanci vnější třídy.
syntaxe pro vytvoření objektu pro vnitřní třídu je následující:
Syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();For example:// First create an object of Outer class Test. Test t = new Test();// Second create an object of inner class A. Test.A innerObj = t.new A();
pojďme pochopit, jak instance vnitřní třídy sdílí vztah s instancí vnější třídy s příklady v reálném čase.
Realtime příklad vnitřní třídy
1. Předpokládejme, že existuje univerzita. Univerzita obsahuje několik oddělení, jako je elektronika, Informatika,elektrický, mechanický, atd.
Předpokládejme, že zítra se vláda rozhodla uzavřít tuto univerzitu kvůli její nezákonné činnosti na univerzitě. Pokud je univerzita uzavřena, všechna oddělení této univerzity budou automaticky uzavřena.
proto můžeme říci, že katedry jsou vázány na její univerzitu. jejich funkcionalita je vázána na univerzitu. Bez stávajícího univerzitního objektu tedy neexistuje šance na existující objekty katedry.
protože Katedra je vždy součástí univerzitní třídy. Proto musíme prohlásit třídu katedry uvnitř univerzitní třídy.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
takže bez existujícího jednoho typu objektu, pokud neexistuje šance na existenci jiného typu objektu, bychom měli implementovat inner class.
2. Předpokládejme, že existuje auto. V autě existuje několik důležitých jednotlivých komponent, které jsou vyžadovány. Nejdůležitější součástí vozu je motor.
k výrobě automobilu musí být vyžadován motor. Ale bez existujícího objektu automobilu neexistuje ani šance na existenci objektu motoru.
protože motor je vždy důležitou součástí automobilu. Proto musí být motor třídy deklarován uvnitř vozu třídy.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
výše uvedené dva příklady v reálném čase jsou vysvětleny, aby získaly základní myšlenky vnitřní třídy. Nyní budeme mít další příklad založený na Java API.
3. Jak víme, v Javě existuje koncept mapy v API kolekcí. Mapa není nic jiného než skupina párů klíč-hodnota. Každá dvojice klíč-hodnota se nazývá jedna položka. Nyní bez existujícího objektu mapy existuje nějaká šance na existující objekt vstupu?
odpověď zní ne, protože bez existujícího objektu mapy nemůže vstupní objekt také existovat. Proto je položka rozhraní definována uvnitř rozhraní mapy.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
Nyní byste z výše uvedeného příkladu v reálném čase pochopili, že kdy by měl používat vnitřní třídu v programování Java.
Použití Vnitřní třídy v Javě
existují následující důležitá použití vnitřní třídy v Javě.
1. Vnitřní třída je cenná vlastnost, protože nám umožňuje seskupovat třídy a rozhraní na jednom místě, které logicky patří k sobě.
2. Pomáhá řídit viditelnost jednoho uvnitř druhého, takže může být čitelnější a udržovatelnější.
3. Nejlepší využití vnitřní třídy java je, když je její funkčnost vázána na vnější třídu. To znamená, že bez existujícího objektu vnější třídy neexistuje šance na existující objekt vnitřní třídy. Pochopte příklady v reálném čase.
4. . Vnitřní třída Java je užitečná pro zajištění bezpečnosti důležitého kódu. Například, pokud deklarujeme vnitřní třídu jako soukromou, není k dispozici jiným třídám. To znamená, že objekt do vnitřní třídy nelze vytvořit v žádné jiné třídě.
pojďme to pochopit pomocí příkladu programu v reálném čase.
Předpokládejme, že vytvoříme třídu Bankact. Chcete-li získat některé údaje o bankovním účtu, definujeme proměnné instance „balance“ a „rate“ of interest ve třídě.
calInterest() metoda vypočítá výši úroku a zobrazí částku zůstatku. Podívejte se na následující zdrojový kód.
class BankAcct { // Balance and Rate of interest. private double bal; private double rate; // Calculating interest and updated balance. void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance amount = " +bal); }}
jak zjistíte, že pro tento kód neexistuje žádné zabezpečení, protože před třídou BankAcct nepoužíváte žádné modifikátory přístupu.
vzhledem k tomu, že je pod výchozími modifikátory přístupu, může každý programátor snadno vytvořit objekt této třídy a přistupovat k členům třídy mimo jiné třídy. Proto neexistuje žádná bezpečnost pro třídu BankAcct.
například každý programátor může vytvořit jinou třídu. Vytvoří instanci třídy Bankact a může takto změnit úrokovou sazbu:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
metoda calInterest () je tedy velmi citlivá. Musí být chráněna před cizími lidmi, protože zůstatkové účty mohou být aktualizovány zvenčí jakoukoli jinou osobou. Pouze oprávněná osoba by měla mít možnost aktualizovat zůstatkové účty.
pro zajištění bezpečnosti metody calInterest() a úrokové sazby, pokud vložíme kód metody calInterest () do vnitřní třídy a učiníme ji soukromou, nikdo k nim nemá přístup z vnější třídy. Podívejte se na kód.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
nyní je otázkou, Jak získat přístup k vnitřní třídě?
pro přístup k vnitřní třídě vytvoříme metodu contact() uvnitř vnější třídy. Metoda Inside contact (), vytvoříme objekt vnitřní třídy a budeme mít přístup k jejím členům.
osoba ověřovací banky může komunikovat s vnitřní třídou voláním metody contact (). Při volání metody contact() bude ověřen heslem a poté bude moci používat vnitřní třídu a přistupovat k ní.
vnitřní třída tedy může poskytnout bezpečnostní mechanismus důležitému kódu v Javě.
typy vnitřní třídy v Javě
na základě deklarace a chování existují v Javě v zásadě čtyři typy vnitřních tříd. Jsou následující:
- normální nebo pravidelná vnitřní Třída
- metoda místní vnitřní Třída
- anonymní vnitřní Třída
- statická vnořená vnitřní Třída
v tomto tutoriálu budeme stručně rozumět každému z nich.
1. Normální nebo pravidelná vnitřní třída: třída vytvořená uvnitř jiné třídy a mimo metodu bez statického modifikátoru se nazývá normální nebo normální vnitřní třída.
2. Metoda místní vnitřní třída: třída deklarovaná v rámci metody vnější třídy se nazývá metoda místní vnitřní třída.
3. Anonymní vnitřní třída: Třída deklarovaná bez jakéhokoli jména se nazývá anonymní vnitřní třída.
4. Statická vnořená vnitřní třída: třída deklarovaná statickým modifikátorem v rámci třídy se nazývá statická vnořená vnitřní třída. To je také známé jako vnořená třída nejvyšší úrovně. Má přístup pouze ke statickým členům vnější třídy.
Poznámka: pravidelné, metodově lokální a anonymní vnitřní třídy jsou nestatické vnořené třídy.
výhody vnitřní třídy
v Javě je v podstatě pět výhod vnitřní třídy. Jsou následující:
1. Inner class poskytuje způsob, jak seskupit třídy a rozhraní na jedno místo, které logicky patří k sobě.
2. Může přímo přistupovat ke všem proměnným a metodám vnější třídy včetně soukromých.
3. Používá se k vývoji čitelnějšího a udržovatelnějšího kódu.
4. K psaní potřebuje méně kódu.
5. Zvyšuje zapouzdření.
rozdíl mezi vnořenou třídou a vnitřní třídou v Javě
vnořená třída je třída, která je definována uvnitř jiné třídy. Existují dva typy vnořené třídy: statické a nestatické. Nestatická vnořená třída je vnitřní třída.
doufám, že tento tutoriál pokryl všechny důležité funkce vnitřní třídy v Javě pomocí příkladů programů v reálném čase. Doufám, že jste pochopili základní myšlenku použití inner class v Javě.
Díky za přečtení!!!Další ⇒ člen vnitřní třída v Javě
pre Předchozí Další ⇒