Kotlin - 抽象类


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

Kotlin 抽象类是在类名前面使用abstract关键字声明的。抽象类的属性和方法是非抽象的,除非我们显式使用abstract关键字使它们抽象。如果我们想在子类中重写这些成员,那么我们只需要在子类中的它们前面使用override关键字即可。

abstract class Person {
   var age: Int = 40

   abstract fun setAge()   // Abstract Method

   fun getAge() {          // Non-Abstract Method
      return age
   }
} 
抽象类始终是开放的。您不需要显式使用open关键字来继承它们的子类。

例子

以下是一个简单的示例,显示了 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类被称为抽象类。

  • 抽象类可能包含也可能不包含抽象方法,即没有主体的方法( public void get(); )

  • 但是,如果一个类至少有一个抽象方法,则该类必须声明为抽象的。

  • 如果一个类被声明为抽象类,则它不能被实例化。

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

  • 如果继承抽象类,则必须提供其中所有抽象方法的实现。

测验时间(面试和考试准备)

答案:D

解释

关于 Kotlin 抽象类的所有给定陈述都是正确的。

问题 2 - 使用哪个关键字来实现抽象类的抽象成员:

A-初始化

B——覆盖

C-覆盖

D——以上都不是

答案:B

解释

我们使用override关键字来实现抽象类的抽象成员