I'm new to generics and here is my problem:
public class Tree<T> { public Collection<Tree<T>> getSubTrees(){}; public Tree<T> getTree(T element){} } public class DataTree extends Tree<Data>{ public void someMethod(){ DataTree dataTree = this.getTree(root) ;// type mismatch Collection<DataTree> leafs = this.getSubTrees(); //type mismatch //following works Tree<Data> dataTree = this.getTree(root); Collection<Tree<Data>> leafs = this.getSubTrees(); } } Can you tell me why I got such errors or how to correctly cast Tree<Data> to DataTree to call DataTree specific methods?