Kotlin 面试题
目录

Kotlin 中接口和抽象类的区别是什么?

· 约 3 分钟读完 · 第 77 / 200 章

推荐答案

在 Kotlin 中,接口和抽象类的主要区别如下:

  1. 实现方式:

    • 接口通过 interface 关键字定义,类可以实现多个接口。
    • 抽象类通过 abstract 关键字定义,类只能继承一个抽象类。
  2. 状态:

    • 接口不能保存状态,即不能有属性字段(Kotlin 1.0 开始支持属性,但必须是抽象的或提供访问器)。
    • 抽象类可以保存状态,可以有属性字段和非抽象方法。
  3. 构造函数:

    • 接口不能有构造函数。
    • 抽象类可以有构造函数。
  4. 方法实现:

    • 接口中的方法默认是抽象的,Kotlin 1.0 开始支持默认方法实现。
    • 抽象类可以有抽象方法和具体方法。
  5. 使用场景:

    • 接口通常用于定义行为契约,适合多继承场景。
    • 抽象类通常用于部分实现的类,适合单继承场景。

本题详细解读

接口(Interface)

接口在 Kotlin 中用于定义一组方法的契约,任何实现该接口的类都必须提供这些方法的具体实现。接口的关键特点包括:

  • 多继承:一个类可以实现多个接口。
  • 默认方法:从 Kotlin 1.0 开始,接口可以包含带有默认实现的方法。
  • 属性:接口可以定义属性,但这些属性必须是抽象的或提供访问器。

抽象类(Abstract Class)

抽象类用于定义部分实现的类,通常作为其他类的基类。抽象类的关键特点包括:

  • 单继承:一个类只能继承一个抽象类。
  • 状态保存:抽象类可以有属性字段和非抽象方法。
  • 构造函数:抽象类可以有构造函数,用于初始化状态。

使用场景

  • 接口:当你需要定义一组行为契约,并且希望多个类能够实现这些行为时,使用接口。例如,定义一个 Drawable 接口,多个类可以实现这个接口来提供不同的绘制行为。

  • 抽象类:当你需要定义一个部分实现的类,并且希望其他类继承这个类时,使用抽象类。例如,定义一个 Animal 抽象类,其中包含一些通用的行为(如 eat 和 sleep),但具体的动物类可以继承并实现这些行为。

通过理解接口和抽象类的区别,开发者可以更好地选择适合的设计模式来构建灵活且可维护的代码。