Kotlin 接口概要
与抽象类类似,无法实例化接口,因为它没有任何构造函数。
- 接口可以同时具有抽象和非抽象函数。
- 接口只能有抽象属性(数据成员),不允许非抽象属性。
- 一个类可以实现多个接口。
- 接口的所有抽象属性和抽象成员函数必须在实现它的类中重写。
接口定义
接口是使用interface
关键字来定义:
interface Color {
val red: String
val green: String
val blue: String
fun showRed()
fun showGreen()
fun showBlue(){
println("blue")
}
}
默认情况下,仅在没有方法体(方法只声明未实现)的情况下声明的方法是抽象的。
使用接口原因
- 使用接口支持多重继承功能。
- 它可以用来实现松耦合。
- 它用于实现抽象。
- 一个类只能扩展一个父类但可以实现多个接口。
- 父类或接口实现的扩展是在子类中使用
:
运算符完成的。
Kotlin 接口示例
实现单个接口:
MyColor类实现Color 接口的属性和抽象方法。并且重写了showBlue方法。
interface Color {
val red: String
val green: String
val blue: String
fun showRed()
fun showGreen()
fun showBlue(){
println("blue")
}
}
class MyColor: Color {
override val red: String
get() = "red"
override val green: String
get() = "green"
override val blue: String
get() = "blue"
override fun showRed() {
println(red)
}
override fun showGreen() {
println(green)
}
override fun showBlue() {
println(blue)
}
}
fun main(args:Array<String>){
val myColor = MyColor()
myColor.showRed()
myColor.showGreen()
myColor.showBlue()
}
结果:
red
green
blue
实现多个接口
可以在同一个类中实现不同接口的多个抽象方法, 所有抽象方法都必须在子类中实现。可以从子类调用其他非抽象的接口方法。
interface Color {
val red: String
val green: String
val blue: String
fun showRed()
fun showGreen()
fun showBlue() {
println("blue")
}
}
interface Shape {
fun drawCircle()
fun drawRectangle()
fun drawSquare()
}
class ShapeColor : Color, Shape {
override val red: String
get() = "red"
override val green: String
get() = "green"
override val blue: String
get() = "blue"
override fun showRed() {
println(red)
}
override fun showGreen() {
println(green)
}
override fun drawCircle() {
println("circle")
}
override fun drawRectangle() {
println("Rectangle")
}
override fun drawSquare() {
println("Square")
}
}
fun main(args: Array<String>) {
val shapeColor = ShapeColor()
shapeColor.showRed()
shapeColor.showGreen()
shapeColor.showBlue() //直接调用接口的方法
shapeColor.drawCircle()
shapeColor.drawRectangle()
shapeColor.drawSquare()
}
结果:
red
green
blue
circle
Rectangle
Square