在学习kotlin的过程总结了一下类的访问修饰符的用法,我把我的总结总结为一下几点
1. 默认定义声明的类是final的,这种类不能被集成重写,只能默认使用其成员。
例如
class Animated {
var isAnimating:Boolean = false
fun animate() {
}
}
那么如果想要能让类产生子类我们需要将类标记为open,下面我们看一下标记open的类的情况
2. 标记定义的类为open
open class Animated {
var isAnimating:Boolean = false
fun animate() {
}
}
只把类标记为open,类的成员不进行任何修饰,那么默认成员就是final的,如果使用这个类产生子类,所有的这个父类的成员都不可以被子类重写,那么我们如何让子类可以重写父类的成员呢,就需要我们将成员标记成open的,例如如下代码
open class Animated {
open var isAnimating:Boolean = false
open fun animate() {
}
}
class BirdAnimation: Animated() {
override var isAnimating:Boolean = false
override fun animate() {
super.animate()
}
}
注意: 如果不显示的将类的成员标记为open子类就不能重写父类的成员,可以对不能被子类重写的成员不进行open标记从而保证父类的安全性。
3.类被标记为abstract
类被标记为abstract,那么这个抽象类中的抽象成员是必须被子类重写实现的,对于抽象类中非抽象函数默认不是open的,但是你可以标记为open的。
//抽象类默认就是open
abstract class Animal {
abstract fun run() //这个必须被子类重写,默认就是open
fun fly() {
//这个默认是final默认不可以被子类重写
}
open fun jump() {
//这个定义成open可以被子类重写
}
}
总之来说如果想要被子类可以重写的成员都需要标记为open,当然除了抽象类中的抽象方法