2017-05-20 54 views
0

我是新來的科特林,我不知道如何解釋這一點,但這個例子應該足夠科特林調用類代表團變異函數

interface Walker{ 
    var position:Pair<Int,Int> 

    fun walk(to:Pair<Int,Int>){ 
     position = to; 
    } 

    fun trip() 
} 

class People(override var position: Pair<Int, Int>):Walker{ 
    override fun trip() { 
     Log.v("TP","Ouch!!") 
    } 
} 



class Superman(override var position: Pair<Int, Int>): Walker by People(position){ 

} 

當我打電話

val sm = Superman(Pair(0,0)) 
     sm.walk(Pair(2,2)) 
     Log.v("TP","${sm.position}" //It give (0,0) instead of (2,2) 

是否還使用委託

+1

我認爲這是行不通的,因爲改變的位置是在班級「人」但不是班級「超人」 – user2568161

回答

0

變化

class Superman(override var position: Pair<Int, Int>): Walker by People(position) 
修復此而一個可能的方式

class Superman(position: Pair<Int, Int>): Walker by People(position) 

這樣你只position初始值傳遞給委託,而不是再一次壓倒一切的position,它取代了最初委託給Person實施。