Kotlin 简明教程

Kotlin - Abstract Classes

Kotlin抽象类类似于Java抽象类,无法被实例化。这意味着我们不能创建抽象类的对象。但是,我们可以从Kotlin抽象类继承子类。

使用 abstract 关键字在类名前方声明Kotlin抽象类。抽象类的属性和方法均为 non-abstract ,除非我们显式使用 abstract 关键字使其变为抽象。如果我们要在子类中覆盖这些成员,只需在子类中在其前方使用 override 关键字即可。

abstract class Person {
   var age: Int = 40

   abstract fun setAge()   // Abstract Method

   fun getAge() {          // Non-Abstract Method
      return age
   }
}

Example

以下是显示Kotlin抽象类及其通过子类实现的简单示例:

abstract class Person(_name: String) {
   var name: String
   abstract var age: Int

   // Initializer Block
   init {
      this.name = _name
   }

   abstract fun setPersonAge(_age:Int)
   abstract fun getPersonAge():Int

   fun getPersonName(){
       println("Name = $name")
   }
}
class Employee(_name: String): Person(_name) {
    override var age: Int = 0

    override fun setPersonAge(_age: Int) {
       age = _age
    }
    override fun getPersonAge():Int {
       return age
    }
}

fun main(args: Array<String>) {
   val employee = Employee("Zara")
   var age : Int

   employee.setPersonAge(20)

   age = employee.getPersonAge()

   employee.getPersonName()
   println("Age = $age")

}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Name = Zara
Age = 20

此处,类 Employee 源自抽象类 Person 。我们在子类 Employee 中实现了了一个抽象属性和两个抽象方法。这里值得注意的是,所有抽象成员都已在子类中使用 override 进行了覆盖,如果子类继承抽象类,则这是强制性的。

总结一下,在其声明中包含 abstract 关键字的Kotlin类称为抽象类。

  1. 抽象类可以包含或不包含抽象方法,即没有主体的方法(public void get();)

  2. 但是,如果一个类至少有一个抽象方法,那么该类 must 被声明为抽象类。

  3. 如果一个类被声明为抽象类,那么它就不能被实例化。

  4. 要使用抽象类,您必须从另一个类继承它,为其中的抽象方法提供实现。

  5. 如果您继承一个抽象类,您必须为其中的所有抽象方法提供实现。