sealed class(密封类)
基本特性:
- 声明一个密封类在类名使用 sealed 修饰符
- 所有子类都必须在与密封类自身相同的文件中声明(子类的扩展类不受此控制)
- 密封类是抽象的,故而不能实例化,且可以拥有抽象方法。
- 密封类不允许有非-private 构造函数(其构造函数默认为 private)
和枚举类相似,所不同的是,在枚举中,我们每个类型只有一个对象(实例);而在密封类中,同一个类可以拥有几个对象。
sealed class Animal
class Bird(var name: String) : Animal()
class Fish(var name: String) : Animal()
使用场景:
fun main(args: Array<String>) {
val animalName = getAnimalName(Fish("鲨鱼"))
print(animalName)
}
fun getAnimalName (animal:Animal):String =when(animal){
is Bird -> "鸟类:"+animal.name
is Fish -> "鱼类:"+animal.name
}
sealed class Animal
class Bird(var name: String) : Animal()
class Fish(var name: String) : Animal()
注:使用密封类的关键好处在于使用 when 表达式 的时候,如果能够验证语句覆盖了所有情况,就不需要为该语句再添加一个 else 子句了