📜  Kotlin 抽象类(1)

📅  最后修改于: 2023-12-03 15:17:09.945000             🧑  作者: Mango

Kotlin 抽象类

抽象类是指只能被继承而不能直接实例化的类,它可以包含抽象成员方法以及非抽象成员方法。在 Kotlin 中,抽象类使用 abstract 修饰符来声明。

声明抽象类

以下是声明抽象类的语法:

abstract class Shape {
    abstract fun area(): Double
    open fun perimeter(): Double {
        return 0.0
    }
}

上述代码中,Shape 类是一个抽象类,包含了一个抽象方法 area() 和一个非抽象方法 perimeter()

  • area() 方法没有方法体,必须由子类实现。
  • perimeter() 方法有一个默认的实现,但可以被子类重写。

需要注意的是,抽象类不能被实例化:

val shape = Shape() // 错误,无法实例化抽象类
实现抽象类

当我们需要实现一个抽象类时,需要重写其中的抽象方法,并提供方法体:

class Circle(val radius: Double) : Shape() {
    override fun area(): Double {
        return Math.PI * radius * radius
    }
    
    override fun perimeter(): Double {
        return 2 * Math.PI * radius
    }
}

上述代码中,我们实现了一个具体类 Circle,该类继承了抽象类 Shape,并重写了其中的抽象方法 area() 和非抽象方法 perimeter()。注意重写方法时必须加上 override 关键字。

抽象类可以包含属性

除了方法,抽象类还可以包含属性。在抽象类中定义的属性可以是抽象或非抽象的。举个例子:

abstract class Shape {
    abstract val area: Double
    open val perimeter: Double = 0.0
}

上述代码中,Shape 类包含了两个抽象属性 area 和一个非抽象属性 perimeter

实现抽象属性时需要提供其具体实现:

class Circle(val radius: Double) : Shape() {
    override val area: Double
        get() = Math.PI * radius * radius
    
    override val perimeter: Double
        get() = 2 * Math.PI * radius
}
总结
  • 抽象类是指只能被继承而不能直接实例化的类,它可以包含抽象成员方法以及非抽象成员方法。
  • 在 Kotlin 中,抽象类使用 abstract 修饰符来声明。
  • 实现抽象类时,需要重写其中的抽象方法,并提供方法体。
  • 抽象类还可以包含属性,实现抽象属性时需要提供其具体实现。