所以我做了這個簡單的接口:如何創建一個接受同一個函數名稱的不同參數的子類?
package{
public interface GraphADT{
function addNode(newNode:Node):Boolean;
}
}
我還創建了一個簡單的類圖:
package{
public class Graph implements GraphADT{
protected var nodes:LinkedList;
public function Graph(){
nodes = new LinkedList();
}
public function addNode (newNode:Node):Boolean{
return nodes.add(newNode);
}
}
最後但並非最不重要的我創造了另一種簡單的類AdjacancyListGraph:
package{
public class AdjacancyListGraph extends Graph{
public function AdjacancyListGraph(){
super();
}
override public function addNode(newNode:AwareNode):Boolean{
return nodes.add(newNode);
}
}
這裏有這個設置給我錯誤,即:
1144: Interface method addNode in namespace GraphADT is implemented with an incompatible signature in class AdjacancyListGraph.
經仔細檢查很顯然,AS3不喜歡從圖不同的圖類newNode:Node
不同的參數類型,以及newNode:AwareNode
從AdjacancyListGraph
但是我不明白爲什麼這樣做是因爲一個問題AwareNode
是Node
的子類。
有什麼辦法可以讓我的代碼工作,同時保持代碼的完整性?
您正在重寫addNode函數來接受AwareNode,它應該可以用於擴展類,但現在接口還需要遵循基類節點的擴展。至少這是它對我的看法。我避免了像鼠疫這樣的界面。 –
@The_asMan,讓我難過。只要你明白它是什麼,接口就是解耦的偉大之處。它的*合約*無論你的對象做什麼,它都會做這些事情。 –
+1獲取接口的用途,@ 32bitkid。實現可重用和可維護架構的唯一方法。而單元測試絕對必要。 – weltraumpirat