kotlin中的接口与Java8中的类似,既包含方法也包含属性。方法包括抽象方法和普通方法,属性包含抽象属性和普通提供访问器的属性。
interface TestInterface {
val prop: Int //抽象属性,必须被实现的类重写覆盖
val name: String //普通属性,必须提供访问器get,属性也可以被实现类覆盖
get() = "tian"
fun test() //抽象方法,没有方法体,必须被实现类重写覆盖
fun test1(){ //普通方法,包含方法体,实现类可以不重写,但实现类可以重写覆盖
println("test1")
}
}
//实现类
class Tian : TestInterface {
override val prop: Int //重写覆盖抽象属性
get() = 1
override val name: String = "nihoa" //重写覆盖普通属性
override fun test() { //重写覆盖
println("test")
}
}
解决冲突
一个类实现多个接口,可能出现类中一个方法是多个接口中相同函数名方法的实现,例如
interface A {
fun foo() { println("A foo") }
fun bar()
}
interface B {
fun foo() { println("B foo") }
fun bar() { println("B bar")}
}
class C: A{
override fun bar() { println("C bar")}
}
class D: A, B {
override fun foo() {
super<A>.foo()
super<B>.foo()
}
override fun bar() {
super<B>.bar()
}
}
上述C类实现了A,必须实现A接口的bar方法。 D类实现了两个接口A、B, 重写覆盖foo函数,以super<超类名>进行了超类方法的调用,bar方法也必须实现,因为在A中Bar方法为抽象的,也可以使用super<超类名>进行了超类方法的调用
网友评论