Android开发Android开发经验谈Android技术知识

Kotlin学习笔记(三)接口

2020-10-19  本文已影响0人  大虾啊啊啊

1.接口

在kotlint中和java类似,接口的声明使用interface来声明,而不同的是kotlin中的接口可以包含抽象函数和非抽象函数,而在java中的接口只能有抽象方法。接口的实现通过冒号来实现。当一个类中实现了两个接口中包含了相同的函数,那么需要显示的进行调用实现。如下面代码的click2函数。

package com.example.kotlin01

class InterFaceTest:CilckListener,CilckListener2 {

    override fun click() {
        super<CilckListener>.click2()
        super<CilckListener2>.click2()
    }
    override fun click2() {
        //指定调用的是CilckListener中的click2方法
        super<CilckListener>.click2()
        //指定调用的是CilckListener2中的click2方法
        super<CilckListener2>.click2()
    }
}

interface CilckListener {
    fun click()
    fun click2() {
        println("longClicked")
    }
}
interface CilckListener2 {
    fun click()
    fun click2() {
        println("longClicked2")
    }
}
fun main() {
    InterFaceTest().click()
    InterFaceTest().click2()
}

2.抽象属性

可以在接口中定义一个抽象属性,在实现类中进行实现。

interface CilckListener {
    val value:Int
    fun click()
    fun click2() {
        println("longClicked")
    }
}
class InterFaceTest:CilckListener,CilckListener2 {
    override val value: Int
        get() =Random().nextInt(10)

    override fun click() {
        println(value)
    }
    override fun click2() {
        //指定调用的是CilckListener中的click2方法
        super<CilckListener>.click2()
        //指定调用的是CilckListener2中的click2方法
        super<CilckListener2>.click2()
    }
}

3.SAM接口

在在 Kotlin 1.4之后,当接口中只有一个抽象方法的时候,在实现的时候可以通过Lambda 的方式实现。
如下代码:

interface CilckListener2 {
    fun click()

}
fun main() {
    //正常的实现
    setClickListenet(object : CilckListener2 {
        override fun click() {

        }
    })
    //1.4.0之后当接口中只有一个抽象方法的时候,在实现的时候可以通过Lambda 的方式实现
//    setClickListenet{
//
//    }
}
fun setClickListenet(l: CilckListener2){

}
上一篇 下一篇

猜你喜欢

热点阅读