Kotlin从入门到精通 | 第七章 类型进阶

172 阅读1分钟

7.内部类

java内部类

public class Outer {
    class Inner { }
    static class StaticInner { }
}

kotlin内部类,默认是静态内部类,添加了inner后为非静态内部类

class Outer {
    inner class Inner
    class StaticInner
}

当要访问内部类时

fun main() {
    //非静态内部类使用类的实例访问"Outer()"
    val inner = Outer().Inner()
    //静态内部类使用类名访问"Outer"
    val staticInner = Outer.StaticInner()
}

匿名内部类

object :Runnable{
    override fun run() {
        
    }
}

匿名内部类支持实现多个接口

val runnableCloneable = object : Cloneable, Runnable {
    override fun run() {

    }
}

kotlin还支持localFunc和LocalClass

fun main() {
    fun localFunc(){
        println("Hello")
    }
    class LocalClass:  Cloneable, Runnable{
        override fun run() {}
    }
}

8.数据类 data class

data class Book(val id: Long,
                val name: String,
                val author: Person)

在类前添加data关键字后就是数据类,他和普通类还有点区别,定义在主构造器中的属性又称为component,可以通过如下方式访问每一个属性

val id = book.component1()
val name = book.component2()
val author = book.component3()

因为有componet这个特性,所以还可以对数据类解构,解构后就可以直接使用这些属性了

val (id: Long, name: String, author: Person) = book