您的位置:首页 > 移动开发 > Android开发

Android开发,Kotlin的了解与学习(七)-----接口与实现

2017-06-22 14:37 344 查看

本章来说一说接口相关的东西

接口

接口的关键字和java一样,也是interface

interface MyListener {
fun onSuccess(msg: String)

fun onError(msg: String = "失败", code: Int)
}

class MyLClass : MyListener{
override fun onSuccess(msg: String) {

}

override fun onError(msg: String, code: Int) {

}
}


如上,可以看到,在kotlin中,实现和继承一样,都是用的:这个符号,你可能疑问,如果同时存在继承和实现呢

class MyLClass : MyListener, Person() {
override fun faFoo(): String {
return ""
}

override fun onSuccess(msg: String) {

}

override fun onError(msg: String, code: Int) {

}
}


是的,用逗号分隔开就可以了,不分前后,系统会自动区分接口还是继承
你可能想到了,如果我想继承一个接口,而不是实现一个接口呢,很明显,类是不能继承接口的,能继承的接口的只有接口,而同时,接口是不能继承一个非接口的类,只能继承接口,并且不能实现另一个接口。所以很明显,extends和implement这两个关键字是不需要存在的。

另外代码里,我还放了一个小彩蛋,这个是在以前提到过的默认值

fun onError(msg: String = "失败", code: Int)


那我们在调用这个方法时,就可以这样了

mListener.onError(0)
//相当于
mListener.onError("失败",0)


可能你们尝试过在类中建立一个参数,并不赋值

var a : Int


却发现,不允许这样做,这就是kotlin的空指针安全了,那么,什么时候允许呢,就是接口里。
在接口中,可以定义一个抽象的属性,像上面那种,同时,如果有类实现了该接口,就必须对该抽象属性进行赋值

override var a: Int = 10


这个大家需要自己去尝试一下了。

多实现的冲突处理

假如类同时实现了两个不同的接口,并且两个接口存在一个相同名称的方法,如下:

interface MyListener1 {
fun onSuccess(msg: String)

fun onError(msg: String = "失败", code: Int)
}

interface MyListener2 {
fun onSuccess(msg: String)

fun onProgress(progress: Int)
}

class MyLClass : MyListener1, MyListener2 {
override fun onProgress(progress: Int) {

}

override fun onSuccess(msg: String) {

}

override fun onError(msg: String, code: Int) {

}
}


可以看到MyLClass这个类,只实现了三个方法,那么这个onSuccess到底代表了哪一个呢?我们可以使用super<接口名>的方式,定位到对应的接口方法中去

super<MyListener2>.onSuccess("")

以上,就是kotlin中类与接口相关的知识点了。(不知不觉都第七章了,我在想从第几章开始涉足到android方面呢)

Android开发,Kotlin的了解与学习(八)-----kotlin在Android上的基础应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐