2 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
所以我不明白的是兩者
AnimatesPaint
都AnimatesPosition
已經(jīng)實(shí)現(xiàn)了createAnimator
。
是的,這些實(shí)現(xiàn)相互沖突。如果您可以這樣做,則生成的類(lèi)的類(lèi)型將需要公開(kāi)兩個(gè)createAnimator
僅通過(guò)返回類(lèi)型區(qū)分的方法。Java 不允許您擁有僅通過(guò)返回類(lèi)型區(qū)分的重載,因此您不能這樣做。出于重載目的,方法簽名不包括返回類(lèi)型。
即使它們具有相同的返回類(lèi)型 (?Animator
),您也會(huì)有兩個(gè)具有完全相同簽名的重載,但您不能這樣做。
如果它們要在同一個(gè)類(lèi)中實(shí)現(xiàn),則它們需要是單獨(dú)的方法(例如,具有可以區(qū)分的單獨(dú)簽名)。
在您提出的評(píng)論中:
但沖突不是因?yàn)樵摲椒ㄒ呀?jīng)被
AnimatesPaint
and重寫(xiě)了AnimatesPosition
嗎?這樣實(shí)現(xiàn)類(lèi)ScreenElement
不需要實(shí)現(xiàn)createAnimator
方法,所以不會(huì)發(fā)生沖突。
不,因?yàn)轭?lèi)本身將這些方法公開(kāi)(或者更確切地說(shuō),需要)作為其簽名的一部分?;旧希僭O(shè)您可以創(chuàng)建該類(lèi)并且您有它的一個(gè)實(shí)例,s
.?會(huì)做什么呢s.createAnimator(300L)
?編譯器應(yīng)該選擇哪一個(gè)?
類(lèi)的公共類(lèi)型由其所有公共成員組成,包括它實(shí)現(xiàn)的所有接口的所有公共成員。因此,在類(lèi)型級(jí)別,兩個(gè)接口不可能實(shí)現(xiàn)具有相同簽名的方法。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您調(diào)用 ScreenElements createAnimator() 方法,它應(yīng)該使用哪一個(gè)?這就是編譯器所抱怨的。您需要告訴它調(diào)用該方法時(shí)要做什么。根據(jù)代碼我不確定。因此,您認(rèn)為 ScreenElement 需要實(shí)現(xiàn) create animator 方法是正確的,這樣編譯器就知道調(diào)用該方法時(shí)要做什么。
添加回答
舉報(bào)