Kotlin腾讯课堂(第28节-第43节)-IDEA篇

本文深入探讨Kotlin编程语言的高级特性,包括格式化代码快捷键、类的继承、抽象类与接口的区别、单例模式、枚举、密封类等核心概念,以及委托和代理的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快捷键(针对mac本)

1.格式化代码:option+command+L

代码如下:


fun main() {
    println("Hello World")
    var rect = WashMachine(19, 5)
    println("洗衣机的宽为${rect.width},高为${rect.height}")
    rect.open()
    rect.close()
    rect.workModel(2)
    rect.work()
    //继承的概念
    var son = Son()//子类继承父类,需要在父类类名前以及父类的方法前定义"open"关键字
    println("儿子继承妈妈的性格为${son.chactor}")
    son.active()
    //抽象类的概念
    var man1 = Man("张三")//使用"abstract"定义抽象类和方法,继承抽象类,需要重写父类的抽象方法
    var man2 = Man("李四")
    var listMan = listOf<Man>(man1, man2)//多态的展现形式
    for (list in listMan) {
        list.eat()
    }
    //接口以及抽象类的区别,抽象类是事物的本质,接口是事物的能力,继承抽象类需要使用"()",而实现接口不需要
    var normalMan = NormalMan("正常人")
    var disableMan = DisableMan("残疾人")
    var list = listOf<Human>(normalMan, disableMan)
    for (man in list) {
        if (man is NormalMan) {
            man.eat()
            man.hasLeg()
        } else {
            man.eat()
        }
    }
    //委托和代理,将sport接口保存在sportmanager的对象实例(构造器)内部,通过传入sport实例对象来调用接口自身的方法以及sportManger的方法
    //参考网址:https://blog.youkuaiyun.com/wzgiceman/article/details/82689135
    //网上百度的写法1
    var swimSport = SwimSport()
    SportManager(swimSport).doSport()
    SportManager(swimSport).otherSport()

    var runSport = RunSport()
    SportManager(runSport).doSport()

    //腾讯课堂写法2 视频39节
    var otherSport = OtherSport()
    otherSport.doSport()
    //单例模式的写法 使用 object代替class关键字,创建的时候不用使用()
    var single1 = singleClass
    var single2 = singleClass
    println("单例模式为:"+(single1==single2))
    //枚举
    println(Week.星期一.ordinal)//下标
    //印章(密封)类   印章和枚举区别是 枚举区分的是数据本身,印章区分的是数据类型(类)
    var allman1 = ALLHuman.AllMan("张先生")
    var allman2 = ALLHuman.AllWoMan("李小姐")
    var allman3 = ALLHuman.AllOlder("杨爷爷")
    var allList = listOf<ALLHuman>(allman1,allman2,allman3)
    for (all in allList){
        if (all is ALLHuman.AllWoMan){
            all.showYoungName()
        }


    }

}

//不要忘记定义变量的时候使用var,不然不能直接调用
class WashMachine(var width: Int, var height: Int) {
    var isCanWash = false
    var model = 0
    fun open() {
        isCanWash = false
        println("洗衣机门打开了")
    }

    fun close() {
        isCanWash = true
        println("洗衣机门关掉了")
    }

    fun workModel(m: Int) {
        model = m
    }

    fun work() {
        if (isCanWash) {
            when (model) {
                0 -> println("请选择模式")
                1 -> {
                    println("轻柔模式开始")
                    setSpeed(100)
                    println("洗衣机在工作")
                }
                2 -> {
                    println("快洗模式开始")
                    setSpeed(200)
                    println("洗衣机在工作")
                }
                else -> print("模式选择错误")
            }


        } else {
            println("洗衣机门还没关")
        }

    }


    //添加private 代表封装,私有化
    private fun setSpeed(speed: Int) {
        println("洗衣机转速为${speed}圈/秒")
    }

}

//父类
open class mother {
    var chactor = "性格开朗"
    open fun active() {
        println("很爱动")
    }
}

//子类继承父类,父类需要在类名前使用open关键字
class Son : mother() {
    override fun active() {
        println("儿子很安静")
    }
}

//定义一个抽象类,它的方法也要定义成抽象的
abstract class Human(var name: String) {
    abstract fun eat()
}

//子类继承抽象类,实现抽象方法
class Man(name: String) : Human(name) {
    override fun eat() {
        println("${name}开始吃饭啦")
    }
}


//定义一个接口,判断这个人是否有腿
interface IMan {
    fun hasLeg()
}

//这是一个正常人
class NormalMan(name: String) : IMan, Human(name) {

    override fun eat() {


        println("我是${name},我可以吃饭")
    }

    override fun hasLeg() {
        println("我是${name},有正常的双腿")

    }
}

//这是一个残疾人
class DisableMan(name: String) : Human(name) {
    override fun eat() {
        println("我是${name},我没有腿,但是我也可以吃饭")
    }
}

//定义一个运动接口
interface ISport {
    fun doSport()
}

//定义一个游泳类
class SwimSport : ISport {
    override fun doSport() {
        println("这是一项游泳运动")
    }
}

//定义一个跑步类
class RunSport : ISport {
    override fun doSport() {
        println("这是一项跑步运动")
    }
}

//通过by(代理)
class SportManager(iSport: ISport) : ISport by iSport {
    fun otherSport() {
        println("我先代理别人做游泳运动,接着做我自己的运动")
    }
}
//代理的第二种写法
class OtherSport : ISport by SwimSport() {
    override fun doSport() {
        println("我先代理别人做游泳运动,接着做我自己的运动")
    }
}
//单例模式
object  singleClass
//枚举类
enum class  Week{
    星期一,星期二,星期三,星期四,星期五,星期六,星期日
}
//印章(密封)类
sealed class ALLHuman(var name:String){
    class AllMan(name:String):ALLHuman(name)
    class AllWoMan(name:String):ALLHuman(name)
    class AllOlder(name:String):ALLHuman(name){
        fun showOLdName(){
            println("老人姓名为+${name}")
        }
    }

    fun showYoungName(){
        println("年轻人姓名为+${name}")
    }

}













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值