密封类用于表示受限制的类层次结构,当一个值只能在一个集合中取值,而不能取其他值时,此时可以使用密封类。在某种意义上,密封类是枚举类的扩展,即枚举类型的值集合。每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。
如果想要创建一个密封类必须满足以下两个条件。
- 密封类必须用sealed关键字来修饰。
- 由于密封类的构造函数是私有的,因此密封类的子类只能定义在密封类的内部或者同一个文件中。
接下来我们通过一个例子来学习密封类,具体示例代码如下:
sealed class Stark {
// 罗伯•斯塔克
class RobStark : Stark(){}
// 珊莎•斯塔克
class SansaStark : Stark(){}
// 艾丽娅•斯塔克
class AryaStark : Stark(){}
// 布兰登•斯塔克
class BrandonStark(){}
}
// 琼恩•雪诺
class JonSnow : Stark(){}
上述代码中,定义了一个密封类Stark,并在该类的内部定义了3个子类,分别是RobStark
类、SansaStark
类以及AryaStark
类。BrandonStark类是该密封类的嵌套类,由于密封类的子类可以不在该密封类中,但是必须与密封类在同一个文件中,因此可知JonSnow类也是该密封类的子类。
需要注意的是,密封类的非直接继承子类可以声明在其他文件中。
Kotlin中密封类与枚举类的区别
- 密封类适用于子类可数的情况,而枚举类适用于实例可数的情况。
酷客教程相关文章:
评论前必须登录!
注册