【2023】Kotlin教程 第二篇 面向对象与函数式编程 第12章 抽象类与接口 12.2 使用接口 12.2.2 接口声明和实现

【2023】Kotlin教程

在这里插入图片描述

第二篇 面向对象与函数式编程

第12章 抽象类与接口

设计良好的软件系统应该具备“可复用性”和“可扩展性”,能够满足用户需求的不断变更。使用抽象类和接口是实现“可复用性”和“可扩展性”重要的设计手段。

12.2 使用接口

比抽象类更加抽象的是接口,接口中主要应该包含抽象函数和抽象属性,但是根据需要可以有具体函数和属性。

【提示】 接口和抽象类都可以有抽象函数和属性,也可以具体函数和属性。那么接口和抽象类有什么区别?接口不能维护一个对象状态,而抽象类可以,因为维护一个对象状态需要支持字段,而接口中无论是具体属性还是抽象属性,后面都没有支持字段。

12.2.2 接口声明和实现

在Kotlin中接口的声明使用的关键字是interface,声明接口Figure示例代码如下:

package com.dingjiaxiong

interface Figure {
    
    

    // 绘制几何图形函数
    fun onDraw()  // 抽象函数

    val name: String // 抽象属性

    val cname: String // 具体属性
        get() = "几何图形"

    fun display() {
    
     // 具体函数
        println(name)
    }
}

interface Figure声明Figure接口,声明接口使用interface关键字fun onDraw()声明抽象函数,抽象函数没有函数体。

val name: String是抽象属性,抽象属性是没有初始值,没有setter或getteri访问器。

val cname: String 是具体属性,具体属性不能有初始值只能有getter访问器,说明该属性后面没有支持字段。fun display()具体函数,它有函数体。

实现接口Figure示例代码如下:

package com.dingjiaxiong

// 几何图形椭圆形
class Ellipse : Figure {
    
    
    override val name: String
        get() = "椭圆形"

    // 绘制几何图形函数
    override fun onDraw() {
    
    
        println("绘制椭圆形...")
    }
}
package com.dingjiaxiong

 三角形
class Triangle(override val name: String) : Figure {
    
    

    // 绘制几何图形函数
    override fun onDraw() {
    
    
        println("绘制三角形...")
    }

}

上述代码声明了两个具体类Ellipse和Triangle,它们实现了接口Figure中的抽象函数onDraw和抽象属性name。

调用代码:

package com.dingjiaxiong

fun main() {
    
    

    val f1: Figure = Triangle("三角形")
    f1.onDraw()
    f1.display()

    val f2: Figure = Ellipse()
    f2.onDraw()
    println(f2.cname)
}

在这里插入图片描述

【注意】接口与抽象类一样都不能被实例化。

猜你喜欢

转载自blog.csdn.net/weixin_44226181/article/details/130004396
今日推荐