4.1、定义类继承结构
Kotlin中的接口
-
Kotlin的接口与Java8相似:它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态
-
使用interface关键字而不是class来声明一个Kotlin的接口
-
声明一个简单的接口(
注意:这里的override修饰符是强制要求显式写出来
)interface Clickable { fun click() }
-
接口实现
class Button:Clickable { override fun click() { println("i was clicked") } }
-
测试
fun main(args: Array<String>) { val btn=Button() btn.click() }
-
Kotlin在类名后面使用冒号来代替了Java中的extends和implements关键字
-
和java一样,一个类可以实现多个接口,但是只能继承一个类
-
与Java中的@Override注解类似,override修饰符用来标注被重写的父类或者接口的方法和属性。在Kotlin中使用override修饰符是强制要求的
-
接口的方法可以有一个默认实现
-
与Java8不同,Java8中需要你在这样的实现上标注default关键字,对于这样的方法,Kotlin没有特殊的注解
-
只需要提供一个方法体,也就是按照正常的方法写就可以
-
例子
-
给Clickable接口添加一个带默认实现的方法
interface Clickable { fun click() //接口默认实现方法,和正常的实现方法写法一样 fun showOff()= println("i'am clickable!") }
class Button:Clickable { override fun click() { println("i was clicked") } //该showOff方法可以重写,也可以不重写 override fun showOff() { super.showOff() } }
-
-
假如有两个接口都有showOff的方法实现,Button类继承了这两个类,那会怎样
-
例子
interface Clickable { fun click() fun showOff()= println("i'am clickable!") }
interface Focusable { fun setFocus(b:Boolean)=println("I ${ if(b) "got" else "lost"} focus.") fun showOff()=println("I'm focusable!") }
class Button:Clickable,Focusable { override fun click() { println("i was clicked") } }
fun main(args: Array<String>) { val btn=Button() btn.click() }
-
IDE报红
-
Kotlin: Class ‘Button’ must override public open fun showOff(): Unit defined in 四.类对象和接口.Clickable because it inherits multiple interface methods of it
-
-
Kotlin编译器强制要求你提供自己的实现,使用尖括号加上父类的名字的super表明了你想要调用哪一个父类的方法
class Button:Clickable,Focusable { override fun click() { println("i was clicked") } override fun showOff() { //使用尖括号加上父类的名字的super表明了你想要调用哪一个父类的方法 super<Clickable>.showOff()
-
-
-