如果一个类要被继承,要用 open 关键字进行修饰
- 不可继承
class Base {
}
- 可继承
open class Base {
}
1、Any类
- Kotlin 中所有类都继承 Any 类,它是所有类的超类
- 对于没有超类型声明的类是默认超类
- Any 默认提供了三个函数 :equals() 、hashCode()、toString()
2、构造函数
- 基类
open class Person constructor(name: String, age: Int) {
var mName: String = name
var mAge: Int = age
init {
Log.i("TAG_ZLZ", "------ 基类主构造函数 : $mName $mAge")
}
}
- 子类无主构造函数
class Student : Person {
var mId: String = ""
constructor(id: String, name: String, age: Int) : super(name, age) {
mId = id
Log.i("TAG_ZLZ", "------ 子类次构造函数 : $mId $mName $mAge")
}
}
val student = Student("201607232", "赵一晨", 20)
- 子类有主构造函数
class Student constructor(id: String, name: String, age: Int) : Person(name, age) {
var mId: String = id
init {
Log.i("TAG_ZLZ", "------ 子类主构造函数 : $mId $mName $mAge")
}
constructor(id: String) : this(id, "xxx", 0) {
Log.i("TAG_ZLZ", "------ 子类次构造函数 : $mId $mName $mAge")
}
}
Log.i("TAG_ZLZ", "------ s1 ------")
val s1 = Student("201607232", "赵一晨", 20)
Log.i("TAG_ZLZ", "------ s2 ------")
val s2 = Student("202100123")
3、重写
- 方法重写
open class Base {
open fun disply() {
Log.i("TAG_ZLZ", "这是基类")
}
}
class Sub : Base() {
override fun disply() {
super.disply()
Log.i("TAG_ZLZ", "这是子类")
}
}
val base = Base()
base.disply()
val sub = Sub()
sub.disply()
- 属性重写
属性重写使用 override 关键字
每一个声明的属性都可以通过 : (1)初始化程序 (2)getter方法 被重写
open class Base {
open var x: Int = 0
open var str: String = ""
set(value) {
field = if (TextUtils.isEmpty(value.toString())) {
"Base"
} else {
value
}
}
fun showBase() {
Log.i("TAG_ZLZ", "基类 $x $str")
}
}
class Sub : Base() {
override var x: Int = 1
override var str: String = ""
set(value) {
field = if (TextUtils.isEmpty(value.toString())) {
"Sub"
} else {
value
}
}
fun showSub() {
Log.i("TAG_ZLZ", "子类 $x $str")
}
}
val base = Base()
base.showBase()
val sub = Sub()
sub.showSub()