Kotlin Academy · Oppitunti

Sisäkkäiset luokat

Luokat luokkien sisällä

Oppitunti 1/413 vaihetta

Sisäkkäiset luokat on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Luokat luokkien sisällä

Kotlinissa luokan voi ilmoittaa toisen luokan sisällä. Oletusarvoisesti tällainen luokka on sisäkkäinen, eikä sillä ole viitettä ulomman luokan ilmentymään.

class Outer {
    class Nested {
        fun hello() = "Hi from Nested"
    }
}

fun main() {
    println(Outer.Nested().hello())
}

Sisäkkäisen ilmentymän luominen

Koska sisäkkäinen luokka on itsenäinen, sen voi luoda ulomman luokan nimen kautta ilman ulomman luokan ilmentymää: Outer.Nested().

class Computer {
    class Cpu {
        val cores = 8
    }
}

fun main() {
    val cpu = Computer.Cpu()
    println(cpu.cores)
}

Ei pääsyä ulomman luokan jäseniin

Sisäkkäinen luokka ei voi käyttää ulomman luokan ilmentymäjäseniä, koska sillä ei ole viitettä ulompaan luokkaan. Se toimii kuin ylätason luokka, joka on rajattu nimen alle.

class Bank {
    val name = "ACME"
    class Branch {
        fun describe() = "A branch"
    }
}

fun main() {
    println(Bank.Branch().describe())
}

Miksi luokkia sisäkkäin?

Sisäkkäisyys ilmaisee loogisen ryhmittelyn: sisempi tyyppi kuuluu käsitteellisesti ulompaan tyyppiin, mikä parantaa järjestystä ja nimitilan hallintaa.

class Http {
    class Request(val url: String)
}

fun main() {
    val r = Http.Request("/home")
    println(r.url)
}

Sisäkkäinen luokka ja ominaisuudet

Sisäkkäiset luokat ovat tavallisia luokkia: niillä voi olla konstruktoreita, ominaisuuksia ja metodeja.

class Garage {
    class Car(val model: String) {
        fun honk() = "$model: beep"
    }
}

fun main() {
    println(Garage.Car("Tesla").honk())
}

Companion- tai staattisen kaltaisten jäsenten käyttäminen

Sisäkkäisiin luokkiin voi viitata mistä tahansa ulomman luokan nimellä samaan tapaan kuin Javan staattiseen sisäkkäiseen luokkaan.

class Config {
    class Defaults {
        val timeout = 30
    }
}

fun main() {
    println(Config.Defaults().timeout)
}

Useita sisäkkäisiä luokkia

Ulompi luokka voi sisältää useita sisäkkäisiä luokkia toisiinsa liittyvien tyyppien ryhmittelemiseksi.

class Shapes {
    class Circle(val r: Int)
    class Square(val side: Int)
}

fun main() {
    println(Shapes.Circle(5).r)
    println(Shapes.Square(4).side)
}

Sisäkkäinen luokka sisäkkäisen luokan sisällä

Voitte käyttää sisäkkäisyyttä useammalla kuin yhdellä tasolla, mutta syvä sisäkkäisyys voi heikentää luettavuutta.

class A {
    class B {
        class C {
            val value = 42
        }
    }
}

fun main() {
    println(A.B.C().value)
}

Sisäkkäinen vai ylimmän tason luokka

Toiminnallisesti sisäkkäinen luokka vastaa ylimmän tason luokkaa; ainoa ero on sen kvalifioitu nimi. Valitkaa sisäkkäisyys, kun luokkien välinen suhde selkeyttää rakennetta.

class Order {
    class Item(val price: Int)
}

fun main() {
    val total = Order.Item(10).price + Order.Item(5).price
    println(total)
}

Käytännöllinen ryhmittely

Muodostimen tulostyypin ryhmitteleminen omistajansa alle tuntuu luontevalta.

class Parser {
    class Result(val ok: Boolean, val message: String)

    fun parse(text: String) = Result(text.isNotEmpty(), "parsed")
}

fun main() {
    val res = Parser().parse("data")
    println("${res.ok} ${res.message}")
}

Tärkeä muistisääntö

Avainsana, joka saa luokan säilyttämään viitteen ulompaan ilmentymään, on inner. Ilman sitä sisäkkäinen luokka on staattisen kaltainen ja erillinen.

class Box {
    class Lid
}

fun main() {
    println(Box.Lid() != null)
}

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte sisäkkäisiä luokkia.

Kertaus

Opitte sisäkkäisistä luokista:

  • Ne määritellään toisen luokan sisällä, ja oletuksena käytetään class-määrittelyä (nested).
  • Niillä ei ole viitettä ulompaan ilmentymään, eivätkä ne voi käyttää ulomman luokan jäseniä.
  • Ne luodaan ulomman luokan nimellä: Outer.Nested().
  • Ne sopivat erinomaisesti loogiseen ryhmittelyyn ja nimiavaruuksien jäsentämiseen.
class Outer {
    class Nested { val x = 1 }
}

fun main() {
    println(Outer.Nested().x)
}
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 ”Sisäkkäiset luokat” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Sisäkkäiset 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 ”Sisäkkäiset luokat”?

Luokat luokkien sisällä 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 1/4.

Kuinka kauan ”Sisäkkäiset 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