在以下示例中,TreeNode是超類,BinaryNode是子類。Java繼承最大限度地重用
public class TreeNode {
private int data;
private TreeNode parent;
private List<TreeNode> children;
TreeNode() {
this.data = 0;
this.parent = null;
this.children = new ArrayList<TreeNode>();
}
}
在子類中,每個節點只有兩個孩子。 我寫如下。
我應該如何編寫成員字段和構造函數以最好地使用超類,但保持結構正確?
public class BinaryNode extends TreeNode {
// int data;
// BinaryNode parent;
List<BinaryNode> children;
BinaryNode() {
super();
children = new ArrayList<BinaryNode>(2);
}
}
在構造函數中調用BinaryNode(),super()對兒童有什麼影響?更重要的是,如果子類在某些字段上有特定的規則,如本示例中只有兩個孩子,那麼如何在超類和子類中編寫構造函數以最大限度地重用?
如果我在超類中有以下方法isLeaf(),不要寫在子類中。 當我嘗試將它與子類實例一起使用時,它會正常工作嗎?
public boolean isLeaf() {
if(this.children == null)
return true;
else
return false;
}
只看這一點,是這一點,使自己的數據結構?如果是這樣,那麼'children'應該是你擁有的類的實例或列表,即'private BinaryNode leftNode;'和'Private BinaryNode rightNode;' – chancea
將會有2個「children」實例,一個在超類中,另一個在子類中...在子類中,你看不到父類的「children」字段,因爲它是私有的... – Renato
回答isLeaf()問題:不,它不會工作...只是嘗試它...在超類與子類中的不一樣。在你的小班中,你看不到超級的孩子......你需要保護孩子,然後擺脫子課程中的孩子....然後你的小班將有「正確」的孩子:) – Renato