kotlin-枚举
枚举也是一个对象,枚举对象的定义需要使用enum关键字
枚举对象可以定义函数
假设定义一个星期枚举对象。就是一下写法
enum class Week {
星期一,星期二,星期三,星期四,星期五,星期六,星期日;
//打印星期几
fun printWeek(){
println("这是星期枚举对象$this")
}
}
如何使用枚举,直接用枚举对象名.属性
下面是调用枚举的代码:
fun main(args: Array<String>) {
Week.星期二.printWeek()
println(Week.星期一)
}
//打印结果:
//这是星期枚举对象星期二
//星期一
应用场景:如果需要规定参数只能为某些固定值的时候,就可以定义一个枚举对象,传递的参数就必须是枚举的某些值。
Kotlin-印章
创建印章类需要使用sealed 关键字来声明。
sealed class Animal(var age:Int){
fun eat(){
println("动物会吃东西")
}
class Cat(age: Int) :Animal(age){
fun catchMice(){
println("$age 岁的小猫会抓老鼠")
}
}
class Dog(age: Int) : Animal(age){
fun guardHouse(){
println("$age 岁的小狗会看家")
}
}
}
印章类不能创建对象,只能创建印章类里面定义的对象类型。
从使用层面看,使用抽象类也能实现这种效果,但是写法不一样。
fun main(args: Array<String>) {
// 创建一个动物印章类里面的小猫对象
var cat = Animal.Cat(1)
cat.catchMice()
//创建一个动物印章类里面的小狗对象
var dog = Animal.Dog(2)
dog.guardHouse()
//小猫和小狗都属于动物印章类,所以可以放到一个集合里面
var animals= listOf(cat,dog)
animals.forEach {
if (it is Animal.Cat){
it.eat()
}
}
}
总结:
枚举比较注重属性。可以简单理解为定义了一对常量。
印章类比较注重对象。可以使用抽象类实现类似效果。