您的位置:首页 > 其它

Kotlin学习笔记--枚举和Sealed Class(密封、印章类型)

2017-11-13 17:20 936 查看
子类类型有限的class

印章类和枚举的区别:

sealed class 更在意类型

枚举更在意数据

枚举:

enum class Week {
星期一,星期二,星期三,星期四,星期五,星期六,星期日
}


使用:

println(Week.星期一)


sealed class

学生分2种,好学生和坏学生。但是只要是学生,都会有学习这个行为

/**
* 印章类
*
* 学生类
*
* 好学生、差学生
*/
sealed class Student {

fun study() {
println("study")
}

//学生类型下的好学生类型
class goodStudent() : Student()

//学生类型下的坏学生类型
class badStudent() : Student()

}


创建并调用方法:

/*
*直接写下面这句,会报错:
*Cannot access '<init>': it is private in 'Student'
*Sealed types cannot be instantiated
*/
//var s = Student()

var s1=Student.goodStudent()

s1.study()

var s2=Student.badStudent()

s2.study()


打印日志:

I/System.out: study
I/System.out: study


可是,好学生和坏学生,学习的方法和状态那些都不一样,修改Student下的代码如下

/**
* 印章类
*
* 学生类
*
* 好学生、差学生
*/
sealed class Student {

open fun study() {
println("study")
}

//学生类型下的好学生类型
class goodStudent() : Student() {
override fun study() {
println("goodStudent,study")
}

fun goodStudy(){
println("goodStudy")
}
}

//学生类型下的坏学生类型
class badStudent() : Student() {
override fun study() {
println("badStudent,study")
}

fun badStudy(){
println("badStudy")
}

}

}


调用:

/*
*直接写下面这句,会报错:
*Cannot access '<init>': it is private in 'Student'
*Sealed types cannot be instantiated
*/
//var s = Student()

var s1=Student.goodStudent()

s1.study()
s1.goodStudy()

var s2=Student.badStudent()

s2.study()
s2.badStudy()


日志如下:

I/System.out: goodStudent,study
I/System.out: goodStudy
I/System.out: badStudent,study
I/System.out: badStudy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: