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){
}
网友评论