kotlin: 接口
一,功能:
① 声明与实现 : 使用 interface 关键字声明接口 , 实现时需要重写所有的抽象成员 ( 属性 / 方法 ) ;
② 接口成员 : 接口中的 正常成员属性和成员方法默认使用 open 关键字修饰 , 接口中的抽象成员属性和抽象成员方法默认使用 abstract open 关键字修饰 ;
③ 接口属性及覆盖 : 变量属性声明成抽象属性 , 常量属性可以声明成抽象属性 , 也可以添加访问器 ;
④ 接口覆盖冲突问题 : 实现类实现多个接口 , 使用 super<接口名称> 调用不同接口的正常方法 ;
二,例子
代码:
interface Person2 {
// 提供了 name 属性 默认的 getter 实现
val name: String
get() = "Tom"
val name2: String //有访问器,子类可以不实现
get() = "谢广坤"
var age: Int
// 该函数也提供了默认的实现, 子类可以不实现
fun sayInfo() {
println("默认信息:名字:${name2}")
}
// 该函数也提供了默认的实现, 子类可以不实现
fun sayHello() {
println("Person sayHello :")
}
fun sayAge() //没有默认实现,子类需实现
}
class Student2 : Person2 {
override var name: String = "Jerry"
get() = field
set(_name: String) {
field = _name
}
override var age: Int = 18
override fun sayHello() {
super.sayHello()
println("$name is $age years old, say hello")
}
override fun sayAge() {
println("$name 今年 $age 岁")
}
}
调用:
//处理按钮点击事件
binding.button1.setOnClickListener {
var student: Student2 = Student2()
student.sayHello()
student.sayInfo()
student.sayAge()
println(student.name2)
student.name = "富贵"
student.sayHello()
println("=========================")
var student2: Person2 = Student2()
student2.sayHello()
student2.sayInfo()
student2.sayAge()
println(student2.name2)
}
运行结果:

三,例子
代码:
interface A {
fun callMe() {
println("From interface A")
}
}
interface B {
fun callMe() {
println("From interface B")
}
}
// 语句super<A>.callMe()调用类A的callMe()方法。
// super<B>.callMe()调用类B的callMe()方法。
class C: A, B {
override fun callMe() {
super<A>.callMe()
super<B>.callMe()
}
}
调用:
//处理按钮点击事件
binding.button2.setOnClickListener {
val obj = C()
obj.callMe()
}
运行结果:
![]()
浙公网安备 33010602011771号