Kotlin基础学习 12

目录

1.Kotlin语言的枚举类型定义函数学习

2.Kotlin语言的代数数据类型

3.Kotlin语言的密封类学习

4.数据类使用条件

5.Kotlin 语言的接口定义


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"

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值