2017-11-20 1 views
0

Java 클래스에서 간단한 Tree를 구현하려고합니다. 그러나 다른 클래스가이 Tree 클래스를 확장하기를 원합니다.Java 클래스 상속 자체 참조 클래스

이 같은 트리 재귀를 만들고있어 :

class Tree<T> { 
    public T data; 
    public List<Tree<T>> children; 

    public Tree(T data){ 
     this.data = data; 
    } 
} 

는 그러나, 나는 수업과 같이 할 말 :

class WeightedTree<T> extends Tree<T> 

이 아이들은 모두 일반 나무,하지 가중 나무입니다입니다. OOP 원칙을 가지고이를 성취 할 수있는 방법이 있습니까?

답변

2

당신이 뭔가를 할 수 있습니다 : 당신이 Tree를 인스턴스화해야하는 경우

class Tree<T, SELF extends Tree<T, SELF>> { 
    public T data; 
    public List<SELF> children; 
} 

class WeightedTree<T> extends Tree<T, WeightedTree<T>> {} 

, 당신은 와일드 카드 사용할 수 있습니다

Tree<String, ?> tree = new Tree<>(); 

을 아니면 자기 유형과 추상 기본 클래스를 만들 수 있습니다 TreeWeightedTree에 대한 별도의 하위 클래스가 있습니다.

+0

와일드 카드 예제가 작동하지 않습니다. 이러한 유형의 인스턴스를 생성 할 수 없습니다. – ruakh

+0

@ruakh 유추 할 수 있다면 그렇게 할 수 있습니다. – shmosel

+0

내 말이 맞다! 그래서 기괴한. 수정 해줘서 고마워. :-) – ruakh

0
/* Package */ abstract class TreeBase<T, TREE_T extends TreeBase<T, TREE_T>> { 
    public T data; 
    public List<TREE_T> children; 

    public TreeBase(T data) { 
     this.data = data; 
    } 
} 

public class Tree<T> extends TreeBase<T, Tree<T>> { 
    public Tree(T data) { 
     super(data); 
    } 
} 

public class WeightedTree<T> extends TreeBase<T, WeightedTree<T>> { 
    public WeightedTree(T data) { 
     super(data); 
    } 
}