上一篇博客介绍了,Android-Kotlin-枚举enum;
由于枚举 和 印章类 有相似之处,所以两者对比一下:
-
Kotlin的枚举,重点区分的数据本身
-
Kotlin的印章类,重点区分的是数据类型(类)
枚举类的定义:
package cn.kotlin.kotlin_oop09
/**
* 定义人的性别 枚举类
*/
enum class MyEnumPersonSex {
男, 女
}
印章类的定义:
package cn.kotlin.kotlin_oop10
/**
* 此类一旦被sealed修饰,就是印章类,此类不能实例化了,只能实例化MySealedPersonSex.Man / WoMan
*/
sealed class MySealedPersonSex {
/**
* MySealedPersonSex的>>> 类 男人👱
*/
class Man(var name:String, var age:Int) {
/**
* 打印姓名和年龄的方法
*/
fun showNameAge() {
println("这为男人的 姓名是:${name}, 年龄是${age}岁")
}
}
/**
* MySealedPersonSex的>>> 类 女人👩
*/
class WoMan(var name:String, var age:Int) {
/**
* 打印姓名和年龄的方法
*/
fun showNameAge() {
println("这为女人的 姓名是:${name}, 年龄是${age}岁")
}
}
}
定义Mother印章类:
package cn.kotlin.kotlin_oop10
/**
* 此类一旦被sealed修饰,就是印章类,此Mother类不能实例化了,只能实例化Mother.Man / WoMan
*/
sealed class Mother {
/**
* MySealedPersonSex的>>> 类 男孩👱
*/
class Man(var name:String, var scale:Double) : Mother() {
/**
* 打印姓名和重量的方法
*/
fun showNameAge() {
println("这为男宝宝的 姓名是:${name}, 重量是${scale}岁")
}
}
/**
* MySealedPersonSex的>>> 类 女孩👩
*/
class WoMan(var name:String, var scale:Double) : Mother() {
/**
* 打印姓名和重量的方法
*/
fun showNameAge() {
println("这为女宝宝的 姓名是:${name}, 年龄是${scale}岁")
}
}
}
main方法测试:
main方法测试:
package cn.kotlin.kotlin_oop10
fun main(args: Array<String>) {
// 这样实例化Mother会报错,因为一旦被sealed修饰,就是印章类,此Mother类不能实例化了
// var mother = Mother()
/**
* 必须是Mother定义的类
* class Man() {}
*/
var mother1: Mother.Man = Mother.Man("小华", 7.80)
var mother2: Mother.Man = Mother.Man("小俊", 7.70)
var mother3: Mother.Man= Mother.Man("小天", 8.80)
var mother4: Mother.Man = Mother.Man("天天", 7.30)
var mother5: Mother.Man = Mother.Man("小旺", 7.10)
var mother6: Mother.Man = Mother.Man("明旺", 6.99)
/**
* 必须是Mother定义的类
* class WoMan() {}
*/
var mother7 = Mother.WoMan("小美", 8.20)
var mother8 = Mother.WoMan("美美", 7.12)
var mother9 = Mother.WoMan("小芳", 7.39)
var mother10 = Mother.WoMan("小薇", 8.00)
var mother11 = Mother.WoMan("小苗", 7.89)
var mother12 = Mother.WoMan("柔柔", 8.74)
var listMan = listOf<Mother.Man>(mother1,
mother2,
mother3,
mother4,
mother5,
mother6)
for (man in listMan) {
/**
* man is Mother.Man is 判断这个man是不是等于/所属 Mother.Man
*/
if (man is Mother.Man)
man.showNameAge()
}
var listWoMan = listOf<Mother.WoMan>(mother7,
mother8,
mother9,
mother10,
mother11,
mother12)
for (woMan in listWoMan) {
/**
* man is Mother.WoMan is 判断这个man是不是等于/所属 Mother.WoMan
*/
if (woMan is Mother.WoMan)
woMan.showNameAge()
}
}
执行结果: