Kotlin 接口概要
與抽象類類似捍岳,無法實例化接口,因為它沒有任何構(gòu)造函數(shù)睬隶。
- 接口可以同時具有抽象和非抽象函數(shù)锣夹。
- 接口只能有抽象屬性(數(shù)據(jù)成員),不允許非抽象屬性苏潜。
- 一個類可以實現(xiàn)多個接口银萍。
- 接口的所有抽象屬性和抽象成員函數(shù)必須在實現(xiàn)它的類中重寫。
接口定義
接口是使用interface
關(guān)鍵字來定義:
interface Color {
val red: String
val green: String
val blue: String
fun showRed()
fun showGreen()
fun showBlue(){
println("blue")
}
}
默認情況下恤左,僅在沒有方法體(方法只聲明未實現(xiàn))的情況下聲明的方法是抽象的贴唇。
使用接口原因
- 使用接口支持多重繼承功能。
- 它可以用來實現(xiàn)松耦合飞袋。
- 它用于實現(xiàn)抽象戳气。
- 一個類只能擴展一個父類但可以實現(xiàn)多個接口。
- 父類或接口實現(xiàn)的擴展是在子類中使用
:
運算符完成的巧鸭。
Kotlin 接口示例
實現(xiàn)單個接口:
MyColor類實現(xiàn)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()
}
結(jié)果:
red
green
blue
實現(xiàn)多個接口
可以在同一個類中實現(xiàn)不同接口的多個抽象方法纲仍, 所有抽象方法都必須在子類中實現(xiàn)呀袱。可以從子類調(diào)用其他非抽象的接口方法郑叠。
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() //直接調(diào)用接口的方法
shapeColor.drawCircle()
shapeColor.drawRectangle()
shapeColor.drawSquare()
}
結(jié)果:
red
green
blue
circle
Rectangle
Square