/**
* 1.在類的構(gòu)造方法中击狮,如不用val或者var修飾參數(shù)拯杠,
* 該參數(shù)不為屬性秧均,只能被類內(nèi)部的屬性訪問到,方法內(nèi)訪問不到
*/
interface Driver { //駕駛接口
fun drive()
}
interface Writer { //寫作接口
fun write()
}
//資深經(jīng)理刹勃,實(shí)現(xiàn)了駕駛和寫作的接口,并帶有driver和writer兩個(gè)屬性
class SeniorManager(val driver: Driver, val writer: Writer): Driver by driver, Writer {
//將Driver接口使用by關(guān)鍵字交由傳入的屬性driver代理之后,會(huì)自動(dòng)調(diào)用driver中的driver()方法
//以下三行代碼可省略
// override fun drive() {
// driver.drive()
// }
override fun write() {
writer.write()
}
}
class CarDriver: Driver { //小車司機(jī)盼产,實(shí)現(xiàn)了駕駛接口
override fun drive() {
println("正在駕駛")
}
}
class PPTWriter : Writer { //ppt制作人,實(shí)現(xiàn)了寫作接口
override fun write() {
println("正在制作ppt")
}
}
class Manager: Driver, Writer { //經(jīng)理勺馆,實(shí)現(xiàn)了駕駛和寫作的接口
override fun drive() {
}
override fun write() {
}
}
fun main(args: Array<String>) {
val driver = CarDriver() //新建司機(jī)
val writer = PPTWriter() //新建ppt制作者
val seniorManager = SeniorManager(driver, writer) //新建資深經(jīng)理
seniorManager.drive() //開始駕駛
seniorManager.write() //開始寫作
}
運(yùn)行結(jié)果