이 "노드"에서 상속 모두를위한 이상적인 장소이지만, 심지어는 필요하지 않습니다. \
은 당신이 아마 원하는 것은 당신의 다른 클래스에 대한 참조를 포함하는 하나의 일반적인 "노드"개체입니다 (상속 전에 컴포지션 사용).
그 시점에서 각기 다른 클래스가 수행 할 수있는 작업이있을 것입니다 (그렇지 않은 경우 모두 동일한 데이터 구조에있는 이유는 무엇입니까?). 이러한 공통 기능을 사용하여 공통 인터페이스를 구현하도록하십시오. 노드 클래스는이 인터페이스에 위임 할 수 있거나 다른 클래스는이 인터페이스로 클래스를 추출하여 이에 대한 조치를 취할 수 있습니다.
이것은 무언가를 노드로 강제하는 것보다 낫습니다. 간단한 일을하고 잘하십시오.
--edit-- 난 정말 당신이 당신의 시나리오에 대해 아무것도 게시하지 않았기 때문에 당신 관련된 예제를 추가 할 수 없습니다.
다른 클래스 A, B * C가 있다고 가정 해 봅시다. 먼저 Object의 하위 클래스를 제외하고 모두 AT와 관련되어 있습니까? 인터페이스 "Iface"를 구현한다고 가정 해 봅시다. (그렇지 않으면, 당신은 단지 "개체"로 Iface는 대체 할 수 있지만, 이것은 정말 나쁜 디자인을 의미한다.)
을 어쨌든, 당신의 "노드"개체는 이제 하나의 object--
public class Node {
private List<node> children;
private Iface myObject;
... setters, getters, tree implementation, tree navigation, related garbage...
}
이입니다 당신의 나무를 만드는데 충분합니다. 일을 더 원활하게하기 위해 할 수있는 한 가지 방법은 "노드가 Iface를 구현"하고 객체에 모든 호출을 위임하는 것입니다. Iface는이 먹고 (식품 foodtype) 메소드가 포함되어있는 경우 예를 들어, 노드는 Iface는를 구현하는 방법 할 수 : 그것이 포함 된 클래스가 있었다 것처럼
public void eat(Food foodtype) {
myObject.eat(foodtype);
}
이는 "노드"클래스 역할을 할 것입니다.
그런데 다른 좋은 아이디어는 myObject를 "private final"로 만들고 생성자에서 null이 아닌지 확인하는 것입니다. 그렇게하면 항상 그것이 설정되어 있고 위임 된 구성원 중 누구도 null 확인을 수행하지 않아야한다는 것을 알게됩니다.
지금은 제네릭처럼 보이지 않거나 템플릿이 적용됩니다. 정보를 더 주신다면 어떨까요? 여기에서 할 수있는 유일한 일은 인터페이스를 구현하거나 추상 기본 클래스에서 상속하는 것입니다. – Falmarri
호기심에서 벗어나서 왜 이것을해야합니까? 숙제 문제입니까? – templatetypedef
이 트리는 NodeB 수준 (2 단계)으로 디자인되어 있습니까? 그렇지 않으면 NodeC, NodeD ...가 발생할 것으로 예상합니까? –