一.印章类
印章类关键字sealed 主要目的限定子类类型。
那么kotlin为什么会引入印章类概念,举一个生活中的例子。
动物园里有三个动物,母驴、公马、公驴,他们三个会繁衍什么后代呢?
image.png
科学告诉我们就两种:骡子和小驴
image.png马+驴=骡子,因为马有64条染色体,驴有62条染色体,生出来的骡子有63条染色体。
驴+驴=小驴,因为驴友62条染色体,两个驴当然生出来的还是62条染色体小驴。
二.印章类代码实例
下面我们用代码写一下,这三个动物会繁衍什么类型的后代,因为后代类型不是驴就是骡子所以我们可以用印章类来实现。
sealed class Son {
//小驴继承于Son
class 小驴() : Son()
//小骡继承于Son
class 小骡() : Son()
fun sayHello() {
println("儿子叫了")
}
}
fun main(args: Array<String>) {
var son1 = Son.小驴();
var son2 = Son.小骡();
var son3 = Son.小骡();
var list = listOf<Son>(son1, son2, son3)
for (v in list) {
if (v is Son.小驴) {
v.sayHello();
}
}
}
思考:
印章类和枚举类很类似,但是sealed class 更在意的是类型,而枚举更在意的是数据。
网友评论