說我正在做一個實現接口的類的子類,並有這樣的代碼:不能實現抽象方法和抽象的說法
public void setGoalLocation(Location loc)
{
goal = loc;
}
的代碼無法編譯,因爲它要求我實現了一個「setGoalLocation(Ilocation loc)」方法,其中「Ilocation」是一個接口,「Location」是實現它的實際具體類。
這意味着我必須做這樣的事情:
public void setGoalLocation(ILocation loc)
{
goal = (Location)loc;
}
這只是似乎真的很尷尬。有趣的是,Java似乎並不關心返回Location的其他方法而不是接口ILocation。這工作:
public Location getStartLocation()
{
return start;
}
...即使 「需要」 的方法將是一個 「公共ILocation getStartLocation」。任何人都可以解釋爲什麼這樣,並且讓代碼變得不那麼笨拙嗎?我希望能夠使用位置作爲參數,而不是ILocation。
請分享完整的類和接口定義。 – Aritra 2014-10-01 02:57:26
這是正確的行爲。如果某些代碼僅通過接口與您的類進行通信,那麼代碼不會知道您的類只接受「位置」值。它期望你的類允許任何'ILocation'值。 – fluidsonic 2014-10-01 02:59:07
關於返回值:通過接口與您的類進行通信的代碼需要任何'ILocation'返回值。由於'Location'匹配這個標準,所以使用它作爲更具體的返回類型是很好的。 – fluidsonic 2014-10-01 03:02:38