7.7 Kotlin接口

本文介绍了Kotlin接口的基本概念,包括接口的定义、使用接口的原因及其示例。Kotlin接口支持多重继承,提供抽象属性和方法,有助于实现松耦合和抽象。示例展示了如何实现单个接口以及如何在一个类中实现多个接口。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alfred Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值