接口
接口的关键字和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) {
- }
- }
- 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
在接口中,可以定义一个抽象的属性,像上面那种,同时,如果有类实现了该接口,就必须对该抽象属性进行赋值
- 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) {
- }
- }
- super<MyListener2>.onSuccess("")