网站 邮件系统建设招标,做教育的需要做个网站吗,深圳代理注册公司哪家好,wordpress 3.0.1委托和代理
实现委托和代理#xff0c;使用的是by关键字。 这里设计一个场景#xff1a;假设某个演员被要求唱歌#xff0c;但是不会唱歌#xff0c;就委托一个会唱歌的歌手在后台唱歌。 如何实现这个需求#xff0c;下面就开始直接写代码 首先定义一个唱歌能力接口
int…委托和代理
实现委托和代理使用的是by关键字。 这里设计一个场景假设某个演员被要求唱歌但是不会唱歌就委托一个会唱歌的歌手在后台唱歌。 如何实现这个需求下面就开始直接写代码 首先定义一个唱歌能力接口
interface Ising {fun singing()
}然后创建一个歌手对象实现这个唱歌接口
class SingerA:Ising {override fun singing() {println(歌手甲正在努力唱歌)}
}然后在定义一个演员对象并且用by关键字委托歌手唱歌。
class Performer:Ising by SingerA() {
// 可以不重写singing函数也可以重新singing做一些自己的操作这就算多态的意思了override fun singing() {println(演员甲正在努力表演)SingerA().singing()}
}下面在main函数调用演员的唱歌
fun main(args: ArrayString) {val performer Performer()performer.singing()
}
//运行结果为
//演员甲正在努力表演
//歌手甲正在努力唱歌object关键字-单例对象
上面的代码有一个坑重写的时候SingerA().singing()这种调用方式就等于又创建了一个新的歌手对象调用了唱歌函数。 Kotlin提供了一个关键字object。用object关键字代替class声明对象这个对象就是单例的也就是编译运行的时候直接在内存创建了一个全局唯一的对象。 下面是使用object定义对象的代码
object SingerA:Ising {override fun singing() {println(歌手甲正在努力唱歌)}
}因为歌手对象使用了object声明所以委托歌手的时候就不能带括号了 下面是委托歌手需要修改的代码
class Performer:Ising by SingerA {override fun singing() {println(演员甲正在努力表演)SingerA.singing()}
}