다음 예에서 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
수퍼 클래스에 하나, 서브 클래스에 하나씩 두 개의 "children"인스턴스가 있습니다. ... 서브 클래스에서는 슈퍼 클래스의 "children"필드를 볼 수 없습니다. 왜냐하면 private이기 때문에 ... – Renato
isLeaf() 질문에 응답 : 아니요 작동하지 않습니다 ... 그냥 사용해보십시오 ... 슈퍼 클래스는 서브 클래스의 슈퍼 클래스와 같지 않습니다. 하위 클래스에서는 슈퍼의 하위 항목을 볼 수 없습니다. 하위 클래스를 보호해야하고 하위 클래스에서 하위 클래스를 제거해야합니다. 그러면 하위 클래스에 "올바른"하위 항목이 생깁니다. – Renato