Kotlin Academy · Oppitunti

Inner-luokat

Käytä ulompaa näkyvyysaluetta

Oppitunti 2/413 vaihetta

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:

  • inner antaa 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())
}
Aloita maksutta

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.

Kaikki tämän kurssin oppitunnit

  1. Sisäkkäiset luokat
  2. Inner-luokat
  3. Nimettömät oliot
  4. Paikalliset luokat
← Takaisin: Kotlin Academy