Kotlin的 Object关键字 和 by关键字

这篇博客介绍了如何在Kotlin中使用接口和委托实现角色间的任务分配。通过创建IWashBowl接口,大头儿子和小头爸爸两个类分别实现洗碗任务。小头爸爸通过委托机制将洗碗工作交给大头儿子,自己不干活却获取大部分报酬,体现了Kotlin的编程思想和技巧。
摘要由CSDN通过智能技术生成

每天吃完饭,总要洗碗。围裙妈妈规定,如果是大头儿子洗碗,那我就给他一块钱;如果是小头爸爸洗碗,那我就给他十块钱。今天轮到了小头爸爸洗碗。可是呢,小头爸爸太懒了,想让大头儿子洗碗。但是又太贪心了,他就把洗碗的任务委托给大头儿子去做,最后拿到10块钱,分1块钱给大头儿子,自己得到9块,关键是没干活呀!

如果是在Kotlin中如何实现?

  • 洗碗接口

    interface IWashBowl {
        fun washBowl();
    }
    
  • 大头儿子洗碗

    object BigHeadSon : IWashBowl{
        override fun washBowl() {
            println("儿子,每次洗完只能赚1块钱")
        }
    }
    

    这里使用了kotlin中的object关键字。由object定义类是一个单例的。

  • 小头爸爸洗碗

    class SmallHeadFather : IWashBowl by BigHeadSon{
    
        override fun washBowl() {
            println("小头爸爸开始洗碗")
            BigHeadSon.washBowl() // 由于BigHeadSon是单例的,所以SmallHeadFather 对象多次调用washBowl,都是同一个小头儿子在洗碗。不会有多个小头儿子
            println("小头爸爸洗完了腕,其实没有洗,是让儿子洗的,赚到了10块钱,分儿子一块钱")
        }
    }
    

    这里用到了by关键字,委托的意思。即使小头爸爸不实现washBowl()方法,语法上也不会报错,即class SmallHeadFather : IWashBowl by BigHeadSon。原因是BigHeadSon实现了washBowl()方法,而SmallHeadFather 通过by关键字,委托给了BigHeadSon,因此SmallHeadFather 也就有了washBowl()方法。

  • 测试

    fun main(args: Array<String>) {
        val smallHeadFather = SmallHeadFather()
        smallHeadFather.washBowl()
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值