Kotlin面试题更新 2026-08-03

请解释 Kotlin 扩展函数的定义和基本用法,并说明其背后的实现机制。

考察说明

考察 Kotlin 扩展函数的理解程度和实际运用能力。

回答思路

  1. 【回答框架 1】扩展函数是 Kotlin 中的一种语法糖,允许在不修改原有类的情况下为类添加新的函数。其定义方式是在函数名前加上接收者类型和点号,例如 fun String.addPrefix(prefix: String): String。使用上,扩展函数可以像类的成员函数一样被调用,但其本质是一个静态方法,接收者对象作为第一个参数传入。
  2. 【回答框架 2】扩展函数通常定义在顶层或对象中,通过包导入即可在项目中全局使用。内部可以通过 this 访问接收者对象的公共属性和方法,但无法访问私有或受保护的成员。在 Android 开发中,扩展函数常用于简化 View 操作、Toast 弹出、日志打印等场景,提升代码可读性。
  3. 【回答框架 3】实现机制上,Kotlin 编译器会将扩展函数编译为静态方法,并在调用处传入接收者对象。这意味扩展函数并不真正修改类本身,也不会覆盖已有同签名成员函数。若成员函数与扩展函数签名相同,成员函数优先被调用。扩展函数还支持泛型,可以对任意类型添加通用逻辑。
  4. 【回答框架 4】使用扩展函数时需注意其作用域和可见性。默认情况下,扩展函数是静态分派的,不会触发多态。若在子类上调用父类的扩展函数,实际调用的版本由编译时类型决定。此外,扩展属性也是常见用法,但它不能有幕后字段,只能通过 getter 和 setter 实现。
  5. 【关键点 1】扩展函数通过接收者类型加点号声明,本质是静态方法,不修改原始类。
  6. 【关键点 2】扩展函数无法访问私有成员,且与成员函数重名时成员函数优先。
  7. 【关键点 3】扩展函数是静态分派的,不参与多态,调用由编译时类型决定。
  8. 【关键点 4】扩展属性不支持幕后字段,只能依赖 getter 和 setter。