Kotlin抽象类
外观
Kotlin抽象类是面向对象编程中用于定义未完全实现类结构的核心概念。它允许开发者声明包含抽象成员(未实现的方法或属性)的类,强制子类提供具体实现。抽象类介于接口和普通类之间,既支持部分实现,又能定义规范。
基本定义与特性[编辑 | 编辑源代码]
抽象类通过关键字abstract
声明,具有以下特性:
- 不能直接实例化,必须通过子类继承使用。
- 可包含抽象成员(无实现)和具体成员(已实现)。
- 支持构造函数、属性和方法的完整定义。
abstract class Animal(val name: String) {
abstract fun makeSound() // 抽象方法,无实现
fun eat() { println("$name is eating") } // 具体方法
}
抽象方法与属性[编辑 | 编辑源代码]
抽象方法[编辑 | 编辑源代码]
抽象方法仅定义签名,子类必须覆盖:
class Dog(name: String) : Animal(name) {
override fun makeSound() { println("$name barks!") } // 必须实现
}
fun main() {
val dog = Dog("Rex")
dog.makeSound() // 输出: Rex barks!
dog.eat() // 输出: Rex is eating
}
抽象属性[编辑 | 编辑源代码]
抽象属性同样需在子类中初始化:
abstract class Shape {
abstract val area: Double // 抽象属性
}
class Circle(val radius: Double) : Shape() {
override val area: Double
get() = Math.PI * radius * radius
}
抽象类与接口对比[编辑 | 编辑源代码]
特性 | 抽象类 | 接口 |
---|---|---|
实例化 | 不可 | 不可 |
构造函数 | 支持 | 不支持(Kotlin 1.0) |
状态存储 | 支持(属性可带初始值) | 不支持(属性无幕后字段) |
多继承 | 单继承 | 多实现 |
实际应用案例[编辑 | 编辑源代码]
场景:支付系统设计 抽象类定义通用流程,子类实现具体支付逻辑:
abstract class PaymentGateway {
abstract fun processPayment(amount: Double): Boolean
fun logTransaction() { println("Transaction logged") }
}
class CreditCardGateway : PaymentGateway() {
override fun processPayment(amount: Double): Boolean {
println("Processing credit card payment: $$amount")
return true
}
}
class PayPalGateway : PaymentGateway() {
override fun processPayment(amount: Double): Boolean {
println("Processing PayPal payment: $$amount")
return true
}
}
继承关系可视化[编辑 | 编辑源代码]
数学公式支持[编辑 | 编辑源代码]
在图形计算中,抽象类可定义通用公式,如面积计算:
总结[编辑 | 编辑源代码]
- 抽象类用于定义部分实现的模板,强制子类完成剩余逻辑。
- 适合共享通用代码同时允许特定行为扩展的场景。
- 与接口结合使用(通过实现多个接口+继承单个抽象类)可构建灵活架构。
通过合理使用抽象类,能显著提升代码的复用性和扩展性,是Kotlin面向对象设计的重要工具。