跳转到内容

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  
}

抽象类与接口对比[编辑 | 编辑源代码]

抽象类 vs 接口
特性 抽象类 接口
实例化 不可 不可
构造函数 支持 不支持(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  
    }  
}

继承关系可视化[编辑 | 编辑源代码]

classDiagram Animal <|-- Dog Animal <|-- Cat Shape <|-- Circle Shape <|-- Rectangle PaymentGateway <|-- CreditCardGateway PaymentGateway <|-- PayPalGateway

数学公式支持[编辑 | 编辑源代码]

在图形计算中,抽象类可定义通用公式,如面积计算: Area of Circle=πr2

总结[编辑 | 编辑源代码]

  • 抽象类用于定义部分实现的模板,强制子类完成剩余逻辑。
  • 适合共享通用代码同时允许特定行为扩展的场景。
  • 与接口结合使用(通过实现多个接口+继承单个抽象类)可构建灵活架构。

通过合理使用抽象类,能显著提升代码的复用性和扩展性,是Kotlin面向对象设计的重要工具。