kotlin: 抽象类与继承
一,代码:
说明:
abstract 关键字用于在Kotlin中声明抽象类。
无法实例化抽象类(不能创建抽象类的对象)。但可以从它们中继承子类
非抽象属性 age和非抽象方法: 如果您需要在子类中覆盖这些成员,则应使用 open 关键字标记它们。
抽象方法 : 它没有任何实现,必须在其子类中重写。
注意:抽象类总是开放的。 您不需要显式使用open关键字从它们继承子类。
在抽象类中,至少有一个抽象方法
1,类:
package com.example.okdemo1.model
abstract class Person(name: String) {
//非抽象属性, 如果您需要在子类中覆盖这些成员,则应使用 open 关键字标记它们
var age: Int = 40
//非抽象属性, 如果您需要在子类中覆盖这些成员,则应使用 open 关键字标记它们
open var email: String = "laowang@163.com"
init {
println("我的名字是 $name.")
}
//非抽象方法,如果您需要在子类中覆盖这些成员,则应使用 open 关键字标记它们
fun displaySSN(ssn: Int) {
println("我的社保号是 $ssn.")
}
//抽象方法, 它没有任何实现,必须在其子类中重写
abstract fun displayJob(description: String)
}
class Teacher(name: String): Person(name) {
//非抽象属性不能覆盖
//如果不存在此行override,则输出原抽象类中的值
override var email: String = "wangfugui@163.com"
//非抽象方法不能覆盖
//覆盖抽象方法
override fun displayJob(description: String) {
println(description)
}
}
2,activity中调用:
//增加
binding.btnIncrement.setOnClickListener {
val jack = Teacher("王富贵")
jack.displayJob("我是一名数学老师。")
jack.displaySSN(23123)
println("年龄:{${jack.age}}");
println("邮箱:{${jack.email}}");
}
二,测试效果: