Inner Class Java / Toistaiseksi olemme tienneet jäsenet luokan ovat muuttujat, menetelmät, rakentajat, ja initializer lohkot.
mutta on myös mahdollista saada luokka tai käyttöliittymä luokan jäsenenä.
toisen luokan sisällä ilmoitettu luokka tunnetaan Jaavassa sisäkkäisinä luokkina. Sisäkkäisen luokan laajuus on sidottu sen sisäkkäisen luokan (ulomman luokan) laajuuteen.
näin ollen, jos luokka B on määritelty luokan A sisällä, luokka B ei voi olla olemassa itsenäisesti ilman luokkaa A. Tässä luokka A on ulompi tai sulkeva luokka ja luokka B on sisäkkäinen Luokka.
Jaavan sisäkkäisellä luokalla on pääsy sisäkkäisen luokkansa jäseniin ( myös yksityisjäseniin). Mutta sulkevalla luokalla ei ole pääsyä sisäkkäisen luokan jäseniin.
toiseen luokkaan kuuluva luokka voi olla joko staattinen tai ei-staattinen. Toisin sanoen Javassa on kahdenlaisia sisäkkäisiä luokkia: staattinen ja ei-staattinen.
staattisella modifioijalla ilmoitettu jäsenluokka tunnetaan Javassa nimellä staattinen sisäkkäinen Luokka.
ei-staattinen jäsenluokka tunnetaan nimellä sisempi luokka tai ei-staattinen sisäkkäinen Luokka. Se on tärkein sisäkkäisen luokan tyyppi.
tässä opetusohjelmassa opetellaan vain sisempää luokkaa Javalla. Myöhemmin, keskustelemme staattinen sisäkkäinen Luokka edelleen opetusohjelma.
sisempi Luokka Javassa
sisempi Luokka Javassa on luokka, joka ilmoitetaan toisen luokan sisällä ilman staattista modifioijaa. Se tunnetaan yleisesti myös ei-staattisena sisäkkäisenä luokkana Jaavalla. Se pääsee käsiksi ulomman luokkansa kaikkiin jäseniin (muuttujiin ja menetelmiin).
sisemmällä luokalla ei voi olla minkäänlaisia staattisia jäseniä. Jaavan sisemmän luokan jäseniä voivat olla:
- instanssimuuttujat
- Instanssimenetelmät
- rakentajat
- Initializer block
- sisäinen luokka
sisemmän luokan syntaksi
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. . . . . } }
luokkaa, jossa sisempi luokka on, kutsutaan koteloituvaksi tai ulommaksi luokaksi. Sulkuluokka on ylätason Luokka, kun taas sisempi luokka kuuluu ulompaan luokkaan.
ulomman luokan ja sisemmän luokan välinen suhde edustaa on-a-suhdetta. Has-a-suhde muodostaa kahden luokan välisen suhteen. Sitä kutsutaan Jaavalla myös sommitteluksi tai aggregaatioksi.
kun jokin sisempi luokka on toisen sisemmän luokan sisempi luokka, sitä kutsutaan sisempien luokkien pesäksi. Sisäluokkien pesinnälle ei ole mitään rajaa.
missä versiossa sisempi Luokka otettiin käyttöön Javassa?
sisempi Luokka otettiin käyttöön Java 1.1-versiossa ilman muutoksia luokkatiedostojen käsittelyyn käytettävässä JVM: ssä. Se on täysin toteutettu avulla Java kääntäjä.
Java-kääntäjä luo jokaiselle sisemmälle luokalle erillisen pisteluokkatiedoston nimeltä Outer$Inner.luokka ja ulompi luokka nimeltään ulompi.luokka. Esimerkiksi sisempi A-luokka kootaan luokkakokeeksi, jonka nimi on Test$A.class.
jos jokin pisteluokkatiedoston nimi sisältää keskellä ” $ ” – symbolin, se näyttää sisemmän luokkatiedoston. Sisempien luokkien luokkatiedostojen muoto on sama kuin ulompien luokkien luokkatiedostojen.
siksi JVM käsittelee sisempien ja ulompien luokkien luokkatiedostot samalla tavalla.
sisemmän luokan piirteitä
on useita tärkeitä sisemmän luokan piirteitä, jotka ovat seuraavat:
1. Sisemmällä luokalla voi olla sama nimi kuin ulommalla luokalla.
2. Sisemmän luokan soveltamisalaa rajoittaa sen ulomman luokan laajuus.
3. Ilman olemassa olevaa ulompaa luokan objektia tai instanssia ei ole olemassa olemassa olevaa sisempää luokan objektia.
4. Sisempi luokka voi suoraan käyttää kaikkia ulomman luokan muuttujia ja menetelmiä, mukaan lukien yksityiset.
5. Koska sisempi luokka on ulomman luokan säännöllinen jäsen aivan kuten luokan ilmoitetut muuttujat ja menetelmät.
siksi voimme käyttää kaikkia java access-modifikaatioita, kuten julkista, oletusarvoa, suojattua ja yksityistä, sisempään luokkaan samaan tapaan kuin luokan muut jäsenet. Ulompi tai normaali luokka ei kuitenkaan voi olla yksityinen tai suojattu.
6. Jos sisemmän luokan muuttujan nimi on sama kuin ulomman luokan muuttujan nimi, Voimme käyttää ulompaa luokkamuuttujaa näin. OuterClassName.tämä.VariableName; tässä tämä edustaa nykyistä ulompaa luokan objektia.
7. Javan sisempi luokka on piilossa toisesta luokasta sen sulkuluokassa. Siksi se tarjoaa turvamekanismin sovellusohjelmaan ja vähentää ohjelman luettavuutta (ymmärtämistä).
8. Sisemmän luokan objekti luodaan usein ulompaan luokkaansa, eikä sitä voida luoda muista luokista.
9. Sekä ulomman luokan että sisemmän luokan objektit luodaan erillisiin muistipaikkoihin.
syntaksi sisäisen luokan objektin luomiseksi Javassa
sisemmän luokan instanssilla on suhde ulomman luokan instanssin kanssa. Tämä suhde on sellainen, että emme voi luoda instanssia sisäisestä luokasta ilman, että meillä on instanssi ulommasta luokasta.
näin ollen sisäisen luokan objektin luomiseksi on ensin luotava ulomman luokan objekti, joka sidotaan sisempään luokkaan. Voimme luoda useita objekteja sisemmän luokan samaan instanssi ulomman luokan.
syntaksi olion luomiseksi sisemmälle luokalle on seuraava:
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();
Katsotaanpa ymmärtää, miten esimerkiksi sisäisen luokan jakaa suhde esimerkiksi ulomman luokan kanssa reaaliaikaisia esimerkkejä.
reaaliaikainen esimerkki sisäisestä luokasta
1. Oletetaan, että on olemassa yliopisto. Yliopisto sisältää useita osastoja, kuten elektroniikka, tietojenkäsittelytiede, sähkö, mekaaninen, jne.
Oletetaan, että huomenna, hallitus päätti sulkea tämän yliopiston koska sen laitonta toimintaa tapahtuu yliopistossa. Jos yliopisto suljetaan, kaikki tämän yliopiston osastot suljetaan automaattisesti.
siksi voidaan sanoa, että osastot ovat sidoksissa sen yliopistoon. toisin sanoen niiden toiminnallisuudet ovat sidoksissa sen yliopistoon. Niin, ilman olemassa yliopiston objekti, ei ole mitään mahdollisuutta nykyisten osaston objekteja.
koska laitos on aina osa yliopistoluokkaa. Siksi meidän täytyy julistaa laitoksen luokan sisällä yliopiston luokassa.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
näin ollen ilman olemassa olevaa yhden tyypin objektia, jos ei ole mitään mahdollisuutta olemassa olevan toisen tyypin objektia, tulisi toteuttaa sisäinen luokka.
2. Oletetaan, että on olemassa auto. Auton sisällä tarvitaan useita tärkeitä yksittäisiä osia. Auton tärkein osa on Moottori.
auton valmistamiseen tarvitaan Moottori. Mutta ilman olemassa olevaa autoesinettä ei ole myöskään olemassa olevaa moottoriobjektia.
koska moottori on aina tärkeä osa autoa. Näin ollen luokan moottori on ilmoitettava luokan auton sisällä.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
edellä mainitut kaksi reaaliaikaista esimerkkiä on selitetty sisäluokan perusajatusten saamiseksi. Nyt otamme seuraavan esimerkin perustuu Java API.
3. Kuten tiedämme, että Java on Karttakonsepti collections API. Kartta ei ole muuta kuin joukko avainarvopareja. Jokaista avainarvoparia kutsutaan yhdeksi sisäänpääsyksi. Nyt ilman olemassa oleva kartta objekti, onko mitään mahdollisuutta olemassa entry objekti?
vastaus on ei, koska ilman olemassa olevaa kartan objektia ei voi olla myös merkintäobjektia. Siksi rajapinnan merkintä on määritelty karttaliittymän sisällä.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
nyt olisi ymmärretty yllä olevasta reaaliaikaisesta esimerkistä, että milloin pitäisi käyttää sisempää luokkaa Java-ohjelmoinnissa.
sisemmän luokan käyttö Jaavalla
on seuraavia tärkeitä sisemmän luokan käyttötarkoituksia Jaavalla
1. Sisäinen luokka on arvokas ominaisuus, koska sen avulla voimme ryhmitellä luokat ja rajapinnat yhteen paikkaan, joka loogisesti kuuluu yhteen.
2. Se auttaa hallitsemaan näkyvyyttä toisen sisällä, jotta se on helpommin luettavissa ja ylläpidettävissä.
3. Javan sisäluokan paras käyttö on silloin, kun sen toiminnallisuus on sidottu sen ulompaan luokkaan. Toisin sanoen ilman olemassa olevaa ulompaa luokkakohdetta ei ole mitään mahdollisuutta olemassa olevaan sisempään luokkakohteeseen. Ymmärrä reaaliaikaiset esimerkit.
4. . Java inner class on hyödyllinen antamaan turvaa tärkeälle koodille. Jos esimerkiksi julistamme sisäisen luokan yksityiseksi, se ei ole muiden luokkien käytettävissä. Tämä tarkoittaa sitä, että sisemmän luokan objektia ei voi luoda mihinkään muuhun luokkaan.
ymmärretään se reaaliaikaisen esimerkkiohjelman avulla.
Oletetaan, että luomme luokan BankAcct. Saadaksesi joitakin pankkitilin tietoja, määrittelemme esimerkiksi muuttujia ’saldo’ ja ’korko’ korko luokassa.
calInterest () – menetelmä laskee korkosumman ja näyttää saldosumman. Katso seuraavaa lähdekoodia.
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); }}
huomatessasi, että tälle koodille ei ole suojausta, koska se ei käytä mitään access-muuntimia ennen BankAcct-luokkaa.
koska se on oletusarvoisten access-modifioijien alaisuudessa, kuka tahansa ohjelmoija voi helposti luoda tämän luokan objektin ja käyttää luokan jäseniä muiden luokkien ulkopuolelta. Näin ollen bankacct-luokalle ei ole turvaa.
esimerkiksi kuka tahansa ohjelmoija voi luoda toisen luokan. Hän luo esimerkiksi BankAcct luokan ja voi muuttaa korkoa näin:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
näin calInterest () – menetelmä on hyvin herkkä. Se on suojattava ulkopuolisilta, koska saldotilejä voi päivittää ulkopuolelta kuka tahansa muu henkilö. Vain valtuutetun henkilön pitäisi pystyä päivittämään saldotilit.
turvan saamiseksi calInterest () – menetelmään ja korkotasoon, jos laitamme calinterest () – menetelmän koodin sisempään luokkaan ja teemme siitä yksityisen, kukaan ei voi käyttää niitä luokan ulkopuolelta. Katso koodia.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
nyt kysymys kuuluu, miten sisäluokkaan pääsee?
sisempään luokkaan pääsemiseksi luodaan kontakti () – menetelmä ulomman luokan sisälle. Inside contact () – menetelmällä luomme sisäluokan objektin ja pääsemme sen jäseniin käsiksi.
tunnistautumispankkihenkilö voi olla vuorovaikutuksessa sisäisen luokan kanssa soittamalla yhteyshenkilölle () – menetelmällä. Kun kontakti () – metodia kutsutaan, hänet varmennetaan salasanalla, minkä jälkeen hän voi käyttää sisäistä luokkaa ja käyttää sitä.
näin sisempi luokka voi tarjota Turvamekanismin tärkeälle koodille Javassa.
Jaavan Sisäluokkien tyypit
julistuksen ja käyttäytymisen perusteella Jaavassa on periaatteessa neljänlaisia sisäluokkia. Ne ovat seuraavat:
- normaali tai säännöllinen Sisäluokka
- menetelmä paikallinen Sisäluokka
- nimetön Sisäluokka
- Staattinen Sisäluokka
tässä opetusohjelmassa ymmärrämme jokaisen lyhyesti.
1. Normaali tai säännöllinen sisäluokka: toisen luokan sisällä ja menetelmän ulkopuolella ilman staattista muuntajaa luotua luokkaa kutsutaan säännölliseksi tai normaaliksi sisäluokaksi.
2. Menetelmä paikallinen sisempi Luokka: ulomman luokan menetelmässä ilmoitettua luokkaa kutsutaan menetelmäksi paikallinen sisempi Luokka.
3. Nimetön sisäinen luokka: Ilman mitään nimeä julistettua luokkaa kutsutaan anonyymiksi sisäluokaksi.
4. Staattinen sisäkkäinen sisäluokka: luokkaa, joka on ilmoitettu staattisella muuntimella, kutsutaan staattiseksi sisäkkäiseksi sisäluokaksi. Se tunnetaan myös huipputason sisäkkäisenä luokkana. Se pääsee käsiksi vain ulomman luokan staattisiin jäseniin.
huomaa: säännölliset, metodi-paikalliset ja nimettömät sisäluokat ovat ei-staattisia sisäkkäisiä luokkia.
sisemmän luokan edut
Jaavassa on periaatteessa viisi sisemmän luokan etua. Ne ovat seuraavat:
1. Sisempi luokka tarjoaa tavan ryhmitellä luokat ja rajapinnat yhteen paikkaan, joka loogisesti kuuluu yhteen.
2. Se pääsee suoraan käsiksi kaikkiin ulomman luokan muuttujiin ja menetelmiin, myös yksityisiin.
3. Sen avulla kehitetään luettavaa ja ylläpidettävää koodia.
4. Se tarvitsee vähemmän koodia kirjoittaakseen.
5. Se lisää kapseloitumista.
Jaavan sisäkkäisen luokan ja sisemmän luokan ero
sisäkkäinen luokka on luokka, joka on määritelty toisen luokan sisällä. Sisäkkäisiä luokkia on kahdenlaisia: staattisia ja ei-staattisia. Ei-staattinen sisäkkäinen luokka on sisempi Luokka.
toivon, että tämä opetusohjelma on kattanut kaikki tärkeät sisäluokan ominaisuudet Javassa reaaliaikaisilla esimerkkiohjelmilla. Toivon, että olette ymmärtäneet perusajatuksen käyttää sisäistä luokkaa Jaavalla.
Kiitos lukemisesta!!!Next ⇒ jäsen sisempi Luokka Java
⇐ Edellinen Seuraava ⇒