最近在做Android recyclerview 封裝,在做的點擊事件的重寫時候贷屎,也就是按照網(wǎng)上的方法套路了一遍谋币,自己并沒有深入理解。點擊事件本質(zhì)上其實就是接口回調(diào)斋射。
對于接口回調(diào)育勺,最近通過《thingk in java》一書中我得到了一個啟示就是:接口是特殊的抽象類但荤。
而抽象方法不過是特殊的方法而已啊。按照網(wǎng)上的接口回調(diào)模式和例子涧至,我用普通的方法模擬了一遍腹躁,發(fā)現(xiàn)更加好理解了。例子如下:
運行結(jié)果為:
通過結(jié)果南蓬,我們可能會推斷纺非,person.whoAreYou(),調(diào)用方法可能是Person類中的getName,然后又走重寫后的getName,其實不是,被調(diào)用的只有被重寫的getName,之所以:my name is A,會被輸出赘方,是因為烧颖,重寫的getName中的super.getName()調(diào)用父Person中的getName.正是由于Java中這繼承初始化順序的特性,導致了這樣的結(jié)果窄陡,所以千萬不要在父類的構(gòu)造方法中使用可能會被子類重寫的方法炕淮。
回到正題,我們再將普通的getName方法變?yōu)槌橄蠓椒ǎㄎ覀円鈭D是跳夭,普通——抽象——接口)涂圆,如下:
這里的輸出結(jié)果:my name is B.其實寫到這一步已經(jīng)很接近我們平時所謂的接口回調(diào)了。執(zhí)行person.whoAreYou(),這句代碼币叹,可以根據(jù)上面例子润歉,認為whoAreYou()方法的getName()其實會去自動尋找子類的實現(xiàn)(重寫)方法。
我們平時的接口回調(diào)是怎么的呢颈抚?如下:
這樣接口就能實現(xiàn)回調(diào)踩衩,callback會自動調(diào)用他的實現(xiàn)類。跟上面的例子是不是很相似呢邪意?