【2023】Kotlin教程
第二篇 面向对象与函数式编程
第12章 抽象类与接口
设计良好的软件系统应该具备“可复用性”和“可扩展性”,能够满足用户需求的不断变更。使用抽象类和接口是实现“可复用性”和“可扩展性”重要的设计手段。
12.2 使用接口
比抽象类更加抽象的是接口,接口中主要应该包含抽象函数和抽象属性,但是根据需要可以有具体函数和属性。
【提示】 接口和抽象类都可以有抽象函数和属性,也可以具体函数和属性。那么接口和抽象类有什么区别?接口不能维护一个对象状态,而抽象类可以,因为维护一个对象状态需要支持字段,而接口中无论是具体属性还是抽象属性,后面都没有支持字段。
12.2.5 接口中具体函数和属性
在Kotlin中接口主要成员是抽象函数和属性,但是也有具体函数和属性。接口中的抽象函数和属性是必须要实现的,而具体函数和属性是可选实现的,根据自己的业务需求选择是否重写它们。
InterfaceA 接口代码:
interface InterfaceA {
fun methodA()
fun methodB(): String
fun methodC(): Int {
return 0
}
fun methodD(): String {
return "这是默认函数..."
}
}
在接口InterfaceA中声明了两个抽象函数methodA和methodB,以及两个具体函数methodC和methodD,并给出了具体实现。
实现接口的实例代码:
class ABC : InterfaceA {
override fun methodA() {
}
override fun methodB(): String {
return "实现methodB 函数"
}
override fun methodC(): Int {
return 500
}
}
实现接口时接口中原有的抽象函数在实现类中必须实现。具体函数可以根据需要有选择重写。上述代码中ABC类实现了InterfaceA接口中的两个抽象函数,并重写了methodB。
调用代码:
fun main() {
val abc = ABC()
println(abc.methodB())
println(abc.methodC())
println(abc.methodD())
}
从运行结果可见,调用函数methodC它是调用类ABC中的实现。调用函数methodD,是调用接口InterfaceA中的实现。