Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第二部分:面向对象编程与 Kotlin 特性

第二部分:面向对象编程与 Kotlin 特性

第 5 章:类与对象

5.5 接口与实现

1. 接口的定义与特点

在 Kotlin 中,**接口(Interface)**用于定义一组抽象行为或契约,允许类通过实现接口来提供具体功能。接口的特点包括:

  • 可以包含抽象方法(无默认实现)或带有默认实现的方法。
  • 支持声明抽象属性(需在实现类中初始化)。
  • 允许多重实现(一个类可实现多个接口)。
  • 接口本身不能保存状态(不能直接声明字段)。

示例:

interface Drawable {
    fun draw() // 抽象方法
    val color: String // 抽象属性
    fun resize(scale: Double) { // 带默认实现的方法
        println("Resizing to $scale")
    }
}

2. 接口的实现

类通过 : 符号实现接口,需重写所有抽象成员。若接口方法有默认实现,可选择是否重写。

示例:

class Circle : Drawable {
    override val color: String = "Red" // 实现抽象属性
    override fun draw() { // 实现抽象方法
        println("Drawing a circle with color $color")
    }
    // resize() 使用默认实现,无需重写
}

3. 多接口冲突解决

若多个接口有相同方法签名(包括默认实现),需在实现类中显式解决冲突:

interface A {
    fun foo() { println("A") }
}
interface B {
    fun foo() { println("B") }
}
class C : A, B {
    override fun foo() {
        super<A>.foo() // 显式调用 A 的实现
        super<B>.foo() // 显式调用 B 的实现
    }
}

4. 接口 vs 抽象类

特性接口 (interface)抽象类 (abstract class)
状态❌ 不能保存字段✅ 可以保存字段
构造函数❌ 不能有构造函数✅ 可以有主/次构造函数
多重继承✅ 支持多实现❌ 单继承
默认方法实现✅ 支持✅ 支持

5. 实际应用场景

  • 功能扩展:通过接口为不同类添加统一行为(如 Comparable 排序)。
  • 依赖注入:定义服务接口,由具体实现类注入。
  • 多态设计:基于接口编程,降低模块耦合度。

6. 完整示例

interface Logger {
    fun log(message: String)
}

class ConsoleLogger : Logger {
    override fun log(message: String) {
        println("[Console] $message")
    }
}

class FileLogger(private val filePath: String) : Logger {
    override fun log(message: String) {
        java.io.File(filePath).appendText("[File] $message\n")
    }
}

fun main() {
    val loggers: List<Logger> = listOf(ConsoleLogger(), FileLogger("log.txt"))
    loggers.forEach { it.log("Hello Kotlin!") }
}

关键点总结

  • 优先使用接口实现多态,而非类继承。
  • 通过 override 关键字显式实现接口成员。
  • 利用默认方法减少重复代码。
  • 注意多接口冲突时的解决语法 super<T>.method()。
Last Updated:: 5/21/25, 7:58 PM