kotlin嵌套类、内部类、匿名内部类、伴生对象

kotlin嵌套类、内部类、匿名内部类

fun main(args: Array) {
    /**
     * 调用嵌套类中的方法
     */
//输出:类可以嵌套其他类中
    Test.Nested().nestedTest()

    /**
     *     调用内部类中的方法
     */
//输出:内部类可以引用外部类的成员,例如:成员属性
    Test().Inner().innerTest()
    /**
     * 采用对象表达式来创建接口对象,即匿名内部类的实例。
     */
    instance.setInterFace(object : TestInterFace {
        override fun test() {
            println("对象表达式创建匿名内部类的实例")
        }
    })
}
class Test {
    var v = "成员属性"

    /**
     * 一个在类中嵌套的类
     * 引用不到外层嵌套类的成员
     */
//嵌套类
    class Nested {
        fun nestedTest() {
            println("类可以嵌套其他类中")
        }
    }
    /**
     * inner标记一个类是内部类
     * 可以引用外部类的成员
     * 采用this@类名方式,获取到外部类的this对象
     */
//内部类
    inner class Inner {
        fun innerTest() {
            var t = this@Test //获取外部类的成员变量
            println("内部类可以引用外部类的成员,例如:" + t.v)
        }
    }
    fun setInterFace(test: TestInterFace) {
        test.test()
    }
}
/**
 * 定义接口
 */
interface TestInterFace {
    fun test()
}

伴生对象

Kotlin中的对象指的是使用object关键字定义的类型声明,一般用作单例模式和伴生对象。

object让创建单例变得十分简单:

object Resource{
    val name="sanshi"

    fun say(){
        println("Hello")
    }
}

Kotlin允许在类中使用companion object创建伴生对象,用伴生对象的成员来代替静态成员:

class Person(val name:String){
    companion object {
        val anonymousPerson=Person("sanshi")
        fun sayHello(){
            println("Hello")
        }
    }

    var age=0
    fun sayName(){
        println("My name is $name")
    }
}

使用伴生对象实际上是在这个类内部创建了一个名为Companion的静态单例内部类,伴生对象中定义的属性会直接编译为外部类的静态字段,而函数会被编译为伴生对象的方法。

fun main(args: Array) {
    Person.anonymousPerson
    Person.sayHello()
    val person = Person("sanshi")
    person.sayName()
}

你可能感兴趣的:(kotlin嵌套类、内部类、匿名内部类、伴生对象)