2010-05-11 98 views
1

我有ClassA和ClassB,ClassA是超類。在這種情況下可以使用繼承嗎? (Java)

ClassA使用NodeA,ClassB使用NodeB。

第一個問題:方法參數。 ClassB需要NodeB類型,但是我不能從子類轉換到超類。這意味着我無法設置NodeB獨有的屬性。

第二個問題:當我需要添加節點到ClassB時,我必須實例化一個新的NodeB。但是,我不能在超類中這樣做,所以我不得不重寫插入以使用NodeB。

有沒有辦法解決這個問題,還是我要重寫整個事情?

+0

NodeA是NodeB的超類嗎? – 2010-05-11 03:43:29

+0

您是否在談論平行層次?你能更具體嗎? – andyczerwonka 2010-05-11 03:46:07

+0

是的,它是一個並行層次結構,是的,NodeA是NodeB的超類 – 2010-05-11 03:49:56

回答

1

我認爲最好的解決方案是使用泛型:將通用代碼放在一個(可能是抽象的)公共超類中,比方說NodeType。 A和B中的每一個可以分別繼承CommonSuper<NodeA>CommonSuper<NodeB>,並覆蓋需要執行特定於其單個節點類型的某些內容的位置。通過這種方式,您的代碼中只會有很少的重複,但能夠完成您所需要的一切。

1

也許您正在尋找類似的東西?

class NodeA { ... } 
class NodeB extends NodeA { ... } 

class ClassA<N extends NodeA> { 
    public Node newNode() { return new NodeA(); } 
    public void setProperties(Node n) { setPropertiesA(n); } 
} 

class ClassB extends ClassA<NodeB> { 
    @Override 
    public NodeB newNode() { return new NodeB(); } 
    @Override 
    public void setProperties(NodeB n) { setPropertiesB(n); super.setProperties(n); } 
} 

這就是你要求的嗎?

尤其要注意ClassB重寫addNode以返回子類,並且setProperties被「鏈接」以在適當時設置NodeB的屬性。

相關問題