7.7 Kotlin接口

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){
    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) {
    val shapeColor = ShapeColor()
    shapeColor.showRed()
    shapeColor.showGreen()
    shapeColor.showBlue() //直接调用接口的方法

    shapeColor.drawCircle()
    shapeColor.drawRectangle()
    shapeColor.drawSquare()
}

结果:

red
green
blue
circle
Rectangle
Square

你可能感兴趣的:(7.7 Kotlin接口)