MST

星途 面试题库

面试题:Kotlin接口与抽象类的设计权衡及应用场景

在一个复杂的Android项目开发中,涉及到多个模块之间的交互,部分功能既需要有默认实现,又要考虑不同模块实现的差异化。请分析在这种场景下,何时选择使用Kotlin接口,何时选择使用抽象类,并详细说明设计思路和理由。
49.4万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

Kotlin接口

  1. 适用场景:当多个模块之间仅需实现特定行为,而不需要共享状态或通用实现细节时,选择Kotlin接口。例如,不同模块对数据展示的格式化方式不同,但都需要实现数据展示功能。
  2. 设计思路:定义一个接口,声明需要实现的方法。各个模块通过实现该接口,提供自己的具体实现。
  3. 理由
    • 灵活性高:多个不相关的类可以实现同一个接口,符合多态性原则。
    • 避免多重继承问题:Kotlin不支持类的多重继承,接口可使类实现多个行为。
    • 轻量级:接口只定义方法签名,不包含方法的默认实现(除了Kotlin 1.4引入的接口默认实现方法,但这也是可选的),使实现类更加专注于自身业务逻辑。

抽象类

  1. 适用场景:当部分功能有默认实现,且不同模块在继承默认实现的基础上进行差异化扩展时,选择抽象类。例如,在一个网络请求模块中,大部分请求有通用的请求头设置等默认行为,但不同类型请求又有各自的参数设置差异。
  2. 设计思路:创建一个抽象类,在其中定义通用的成员变量和方法(包括有默认实现的方法和抽象方法)。具体的模块通过继承该抽象类,重写抽象方法来实现差异化。
  3. 理由
    • 代码复用:抽象类可以包含成员变量和方法的实现,子类可以直接复用这些代码,减少重复代码。
    • 定义规范和模板:抽象类定义了一种规范,子类必须遵循这种规范,同时又能根据自身需求进行扩展。
    • 便于维护和扩展:如果需要修改通用的行为,只需要在抽象类中修改,所有子类都会受到影响,便于统一维护和扩展功能。