[英]Java - Class that extends a class, and has a component that extends the other class' component
[英]Extends class that has itself as a member
假設我必須使用一個具有實現二叉樹的類的庫,其簽名如下:
class Node {
public void setN0(Node n);
public void setN1(Node n);
public Node getN0();
public Node getN1();
}
因此,我想創建一個擴展該類的類,以便在其上放置一個圖形層,例如
class UINode extends Node {
private int coordinateX;
private int coordinateY;
}
但是我不能這樣做,因為不可能將UInode傳遞為Node的子節點,例如
UINode root = new UINode();
UINode n0 = new UINode();
UINode n1 = new UINode();
root.setN0(n0); //Not possible
root.setN1(n1); //Not possible
是否有設計模式或某種方法來應對這種情況? 還是有一個我看不到的簡單解決方案?
實際上,可以將UINode
設置為Node
子級:
UINode root = new UINode();
UINode n0 = new UINode();
root.setN0(n0); // possible
但是,如果要從root
對象獲取它,則必須強制轉換它:
UINode n = (UINode) root.getN0();
除此之外:如果您想自己實現它(假設它不在庫中),則可以創建一個通用Node
類:
class Node<T extends Node> {
public void setN0(T n);
public void setN1(T n);
public T getN0();
public T getN1();
}
現在,您可以在UINode
擴展此類:
class UINode extends Node<UINode> {
// ...
}
並在沒有強制轉換的情況下使用它:
UINode root = new UINode();
root.setN0(new UINode());
UINode n = root.getN0();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.