В следующем примере 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);
}
}
in constructor BinaryNode(), super() называется, что влияет на детей?
Более того, если подкласс имеет определенные правила в некоторых полях, например, только два ребенка в этом примере, как написать конструкторы в суперклассе и подклассе, чтобы максимизировать повторное использование?
Если у меня есть следующий метод isLeaf() в суперклассе и не записывайте его в подкласс. Когда я пытаюсь использовать его с экземпляром подкласса, будет ли он работать правильно?
public boolean isLeaf() {
if(this.children == null)
return true;
else
return false;
}
Просто глядя на это, является точкой этого сделать свою собственную структуру данных? Если это так, то «дети» должны быть списками или экземплярами класса, который у вас есть, т.е. «private BinaryNode leftNode;» и «private BinaryNode rightNode;» – chancea
. Будет два экземпляра «дети», один в суперклассе и один в подклассе ... в подклассе вы не можете видеть поле «дети» суперкласса, потому что оно личное ... – Renato
Ответ на вопрос isLeaf(): НЕТ, это не сработает ... просто попробуйте ... поле для детей в суперкласс не совпадает с суперклассом в подклассе. В вашем подклассе вы НЕ МОЖЕТЕ видеть детей супер ... вам нужно защитить его, а затем избавиться от детей в подклассе .... тогда ваш подкласс будет иметь «правильных» детей :) – Renato