# Kotlin 抽象类 > 原文: [https://www.programiz.com/kotlin-programming/abstract-class](https://www.programiz.com/kotlin-programming/abstract-class) #### 在本文中,您将了解抽象类以及如何在 Kotlin 中实现抽象类(借助示例)。 与 Java 一样,`abstract`关键字用于在 Kotlin 中声明抽象类。 无法实例化抽象类(不能创建抽象类的对象)。 但是,您可以从它们中继承子类。 除非您明确使用`abstract`关键字将其抽象,否则抽象类的成员(属性和方法)是非抽象的。 让我们举个例子: ```kt abstract class Person {   var age: Int = 40 fun displaySSN(ssn: Int) { println("My SSN is $ssn.") } abstract fun displayJob(description: String) } ``` 这里, * 创建一个抽象类`Person`。 您不能创建该类的对象。 * 该类具有非抽象属性`age`和非抽象方法`displaySSN()`。 如果您需要在子类中覆盖这些成员,则应使用`open`关键字标记它们。 * 该类具有抽象方法`displayJob()`。 它没有任何实现,必须在其子类中覆盖。 **注意**:抽象类始终处于打开状态。 您不需要显式使用`open`关键字从它们继承子类。 * * * ## 示例:Kotlin 抽象类和方法 ```kt abstract class Person(name: String) { init { println("My name is $name.") } fun displaySSN(ssn: Int) { println("My SSN is $ssn.") } abstract fun displayJob(description: String) } class Teacher(name: String): Person(name) { override fun displayJob(description: String) { println(description) } } fun main(args: Array) { val jack = Teacher("Jack Smith") jack.displayJob("I'm a mathematics teacher.") jack.displaySSN(23123) } ``` 运行该程序时,输出为: ```kt My name is Jack Smith. I'm a mathematics teacher. My SSN is 23123. ``` 在这里,类`Teacher`从抽象类`Person`派生。 实例化了`Teacher`类的对象`jack`。 在创建时,我们已将`"Jack Smith"`作为参数传递给主构造器。 这将执行`Person`类的初始化块。 然后,使用`jack`对象调用`displayJob()`方法。 请注意,`displayJob()`方法在基类中被声明为抽象,而在派生类中被覆盖。 最后,使用`jack`对象调用`displaySSN()`方法。 该方法是非抽象的,并且在`Person`类中声明(并且不在`Teacher`类中声明)。 * * * **推荐阅读**:, [Kotlin 接口](/kotlin-programming/interfaces "Interfaces in Kotlin") Kotlin 接口类似于抽象类。 但是,接口无法存储状态,而抽象类可以。 意思是,接口可能具有属性,但是它必须是抽象的,或者必须提供访问器实现。 而抽象类的属性不是强制性的。