目录
1.Kotlin语言的枚举类型定义函数学习
//四肢信息class
data class LimbsInfo(var limbsInfo: String,var length: Int){
fun show(){
println("${limbsInfo}的长度是:$length")
}
}
enum class Limbs(private var limbsInfo: LimbsInfo){
LEFT_HAND(LimbsInfo("左手",85)),
RIGHT_HAND(LimbsInfo("右手",86)),
LEFT_FOOT(LimbsInfo("左脚",87)),
RIGHT_FOOT(LimbsInfo("右脚",88)); //;结束枚举值
//1. WEEK 这个时候 再定义单调的枚举值,就报错了,必须所有的枚举值 保持一致的类型
//2. 枚举的 主构造的参数 必须和 枚举(的参数)保持一致
fun show() = "四肢是:${limbsInfo.limbsInfo}的长度是:${limbsInfo.length}"
fun updateData(limbsInfo: LimbsInfo){
println("更新前的数据是:${this.limbsInfo}")
this.limbsInfo.limbsInfo = limbsInfo.limbsInfo
this.limbsInfo.length = limbsInfo.length
println("更新后的数据是:${this.limbsInfo}")
}
}
// TODO 95.Kotlin语言的枚举类型定义函数学习
fun main() {
//显示枚举值
println(Limbs.LEFT_HAND.show())
println(Limbs.RIGHT_HAND.show())
println(Limbs.LEFT_FOOT.show())
println(Limbs.RIGHT_FOOT.show())
println()
//更新枚举值
Limbs.LEFT_HAND.updateData(LimbsInfo("左手2",100))
Limbs.RIGHT_HAND.updateData(LimbsInfo("右手2",100))
Limbs.LEFT_FOOT.updateData(LimbsInfo("左脚2",100))
Limbs.RIGHT_FOOT.updateData(LimbsInfo("右脚2",100))
}
2.Kotlin语言的代数数据类型
enum class Exam{
Fraction1, //分数差
Fraction2, //分数及格
Fraction3, //分数良好
Fraction4; //分数优秀
//需求 得到优秀孩子的名字
var studentName : String ?= null
}
class Teacher(private val exam : Exam){
fun show() =
when(exam){
Exam.Fraction1 -> "该学生分数很差"
Exam.Fraction2 -> "该学生分数及格"
Exam.Fraction3 -> "该学生分数良好"
Exam.Fraction4 -> "该学生分数优秀"
// else -> 由于我们的show函数,是使用枚举类类型来做判断处理的,这个就属于 代数数据类型,就不需要写else了
// 因为when表达式非常明确了,就只有四种类型,不会出现else其他,所以不需要写
}
}
// TODO 96.Kotlin语言的代数数据类型
fun main() {
println(Teacher(Exam.Fraction1).show())
println(Teacher(Exam.Fraction2).show())
println(Teacher(Exam.Fraction3).show())
println(Teacher(Exam.Fraction4).show())
}
3.Kotlin语言的密封类学习
//密封类 成员必须有类型 并且 继承本类
sealed class Exams{
object Fraction1 : Exams() //分数差
object Fraction2 : Exams() //分数及格
object Fraction3 : Exams() //分数良好
class Fraction4(val studentName : String) : Exams(); //分数优秀
}
class Teachers(private val exam : Exams){
fun show() =
when(exam){
is Exams.Fraction1 -> "该学生分数很差"
is Exams.Fraction2 -> "该学生分数及格"
is Exams.Fraction3 -> "该学生分数良好"
is Exams.Fraction4 -> "该学生分数优秀,该学生的姓名是:${(this.exam as Exams.Fraction4).studentName}"
}
}
// TODO 97.Kotlin语言的密封类学习
fun main() {
println(Teachers(Exams.Fraction1).show())
println(Teachers(Exams.Fraction2).show())
println(Teachers(Exams.Fraction3).show())
println(Teachers(Exams.Fraction4("张三三")).show())
println(Teachers(Exams.Fraction4("李四四")).show())
println((Exams.Fraction1 === Exams.Fraction1)) //true === 比较 对象引用 object是单例 只会实例化一次
println(Exams.Fraction4("AAA") === Exams.Fraction4("AAA")) //class 有两个不同的对象,所以是false
}
4.数据类使用条件
data class LoginRequest(var info:String)
// TODO 98.数据类使用条件
// 条件一:服务器请求回来的相应 JavaBean LoginResponseBean 基本上可以使用数据类
// 条件二:数据类至少必须有一个参数的主构造函数
// 条件三:数据类必须有参数,val val的参数
// 条件四:数据类不能使用 abstract,open,sealed,inner 等等修饰(数据类,数据载入的事情 数据存储)
// 条件五:需求比较 ,copy,toString,解构 等等这些丰富的功能时,也可以使用数据类
5.Kotlin 语言的接口定义
interface IUSB{
var usbVersionInfo:String //USB版本相关信息
var usbInsertDevice:String //USB插入的设备信息
fun insertUSB() : String
}
//鼠标USB实现类
class Mouse(override var usbVersionInfo: String = "USB 3.0" ,
override var usbInsertDevice: String = "鼠标接入了USB接口"
) : IUSB {
override fun insertUSB() = "Mouse $usbVersionInfo, $usbInsertDevice"
}
//键盘USB实现类
class KeyBoard : IUSB{
override var usbVersionInfo: String = "USB 3.1"
//下面的get set都会持有field
get() = field
set(value){
field = value
}
override var usbInsertDevice: String = "键盘接入了USB接口"
//下面的get set都会持有field
get() {
println("@你get了[${field}]值出去了")
return field
}
set(value){
field = value
println("@你set了[${value}]值进来了")
}
override fun insertUSB(): String = "KeyBoard $usbVersionInfo,$usbInsertDevice"
}
// TODO 100.Kotlin 语言的接口定义
// 1.接口里面的所有成员 和 接口本身 都是public open 的,所以不需要open,这个是接口的特殊点
// 2.接口不能有主构造
// 3.实现类不仅仅要重写接口的函数,也要重写接口的成员
// 4.接口实现代码区域,全部要增加override 关键字来修饰
fun main(){
val iusb1 : IUSB = Mouse()
println(iusb1.insertUSB())
println()
val iusb2 : IUSB = KeyBoard()
println(iusb2.insertUSB())
iusb2.usbInsertDevice = "AAA"
}