1.第一种方式代码如下
fun main(args: Array<String>) {
val smallHeadFeather = SmallHeadFeather()
smallHeadFeather.wash()
}
//洗完能力
interface Washpower {
//洗碗
fun wash()
}
//大头儿子
class BigHeadSon : Washpower {
override fun wash() {
println("大头儿子开始洗碗了")
}
}
//小头爸爸,将洗碗能力委托给大头儿子
class SmallHeadFeather : Washpower by BigHeadSon()
- 类委托通过关键字
by
来实现
2.类委托第二种实现方式
fun main(args: Array<String>) {
val bigHeadSon =BigHeadSon()
val smallHeadFeather = SmallHeadFeather(bigHeadSon)
smallHeadFeather.wash()
}
//洗完能力
interface Washpower {
//洗碗
fun wash()
}
//大头儿子
class BigHeadSon : Washpower {
override fun wash() {
println("大头儿子开始洗碗了")
}
}
//小头爸爸,将洗碗能力委托给大头儿子
class SmallHeadFeather(val washpower: Washpower) : Washpower by washpower
- 相比较之下:第二种方式扩展性更强
3.类委托加强,在调用方法前后加上一些操作,例如下面代码
fun main(args: Array<String>) {
val bigHeadSon = BigHeadSon()
val smallHeadFeather = SmallHeadFeather(bigHeadSon)
smallHeadFeather.wash()
}
//洗完能力
interface Washpower {
//洗碗
fun wash()
}
//大头儿子
class BigHeadSon : Washpower {
override fun wash() {
println("大头儿子开始洗碗了")
}
}
//小头爸爸,将洗碗能力委托给大头儿子
class SmallHeadFeather(val washpower: Washpower) : Washpower by washpower {
override fun wash() {
println("付给小头儿子一块钱")
//小头儿子洗碗功能
washpower.wash()
println("干得很好,下次继续")
}
}
-
输出结果如下: