Inner-luokat
Käytä ulompaa näkyvyysaluetta
Inner-luokat on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
inner-avainsana
Kun sisäkkäinen luokka merkitään inner-määreellä, se saa viitteen ulompaan ilmentymään ja voi käyttää ulomman luokan jäseniä.
class Outer {
val msg = "Hello"
inner class Inner {
fun show() = msg
}
}
fun main() {
println(Outer().Inner().show())
}Inner-ilmentymän luominen
Koska inner-luokka tarvitsee ulomman ilmentymän, se luodaan sen kautta: Outer().Inner().
class Engine {
val power = 100
inner class Turbo {
fun boosted() = power * 2
}
}
fun main() {
println(Engine().Turbo().boosted())
}Ulomman luokan ominaisuuksien käyttäminen
Inner-luokka lukee ulomman luokan ominaisuuksia ja käyttää niitä suoraan aivan kuin ne olisivat sen omia ominaisuuksia.
class Counter {
var count = 0
inner class Stepper {
fun step() { count++ }
}
}
fun main() {
val c = Counter()
c.Stepper().step()
println(c.count)
}Ulomman luokan metodien kutsuminen
Inner-luokat voivat kutsua myös ympäröivän ilmentymän metodeja.
class Printer {
fun line(s: String) = println(s)
inner class Job {
fun run() = line("printing")
}
}
fun main() {
Printer().Job().run()
}this@Outer-syntaksi
Kun haluatte viitata ulompaan ilmentymään nimenomaisesti, esimerkiksi nimien mennessä päällekkäin, käyttäkää syntaksia this@Outer.
class Outer {
val value = 10
inner class Inner {
val value = 20
fun outerValue() = this@Outer.value
}
}
fun main() {
println(Outer().Inner().outerValue())
}Miksi käyttää inner-määrettä
Käyttäkää inner-määrettä, kun sisäkkäisen tyypin on todella tehtävä yhteistyötä tietyn ulomman ilmentymän kanssa ja jaettava sen tila.
class Wallet {
var balance = 50
inner class Transaction(val amount: Int) {
fun apply() { balance += amount }
}
}
fun main() {
val w = Wallet()
w.Transaction(25).apply()
println(w.balance)
}Jokainen inner-ilmentymä liittyy yhteen ulompaan ilmentymään
Inner-ilmentymä liittyy täsmälleen siihen ulompaan ilmentymään, joka loi sen, joten muutokset kohdistuvat kyseiseen olioon.
class Box(var size: Int) {
inner class Resizer {
fun grow() { size += 1 }
}
}
fun main() {
val b = Box(3)
b.Resizer().grow()
println(b.size)
}Inner-luokka vai sisäkkäinen luokka
Ilman inner-määrettä sisäkkäinen luokka on erillinen. Sen kanssa se kaappaa ulomman ilmentymän. Avainsana muodostaa koko eron.
class Outer {
val tag = "X"
inner class A { fun get() = tag }
}
fun main() {
println(Outer().A().get())
}Muistia koskeva huomautus
Koska inner-ilmentymä pitää ulomman ilmentymän elossa, käsitelkää pitkäikäisiä inner-olioita huolellisesti, jotta ulompi olio ei säily tarpeettomasti.
class Service {
val id = 1
inner class Worker { fun who() = id }
}
fun main() {
println(Service().Worker().who())
}Realistinen iteraattori
Inner-luokka sopii erinomaisesti iteraattoriksi, joka käy läpi ympäröivän kokoelman tilaa.
class Stack {
private val items = mutableListOf(1, 2, 3)
inner class Reader {
fun all() = items.joinToString()
}
}
fun main() {
println(Stack().Reader().all())
}Käsitteiden yhdistäminen
Inner-luokat voivat käyttää ulomman luokan tilaa ja poistaa epäselvyydet this@Outer-syntaksilla.
class Outer {
val n = 5
inner class Inner {
fun doubled() = this@Outer.n * 2
}
}
fun main() {
println(Outer().Inner().doubled())
}Pikatarkistus
Testatkaa, miten hyvin ymmärrätte inner-luokkia.
Kertaus
Opitte inner-luokista:
innerantaa pääsyn ulompaan ilmentymään ja sen jäseniin.- Ne luodaan ulomman ilmentymän kautta:
Outer().Inner(). - Ympäröivään ilmentymään viitataan käyttämällä
this@Outer-syntaksia. - Inner-ilmentymät pitävät ulomman ilmentymän elossa.
class Outer {
val v = 1
inner class Inner { fun get() = v }
}
fun main() {
println(Outer().Inner().get())
}Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Inner-luokat” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Inner-luokat”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Inner-luokat”?
Käytä ulompaa näkyvyysaluetta Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Inner-luokat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?
Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.