Je suis nouveau dans le domaine de Java et je viens d'un environnement PHP, alors je suis désolé si cela est évident. J'essaie d'implémenter une classe d'arbre binaire et j'ai créé une ADT comme suit :
public abstract class BTree<T> {
private T value;
private BTree<T> leftChild;
private BTree<T> rightChild;
private BTree<T> parent;
public BTree<T> getLeftChild() { return this.leftChild; }
....
}
Puis j'ai une autre classe qui l'étend comme ceci :
public class BIntTree extends BTree<Integer> {
}
Cependant, j'aimerais pouvoir intégrer à BIntTree une méthode permettant d'appeler this.getLeftChild();
et obtenir en retour une instance de BIntTree plutôt qu'une instance de BTree<Integer>
Est-ce possible en définissant la classe/méthode générique ou dois-je explicitement utiliser le type cast après avoir utilisé this.getLeftChild() ou même surcharger la méthode de la superclasse ?
La solution que j'ai trouvée est d'effectuer un typage explicite dans la méthode BIntTree avec la commande BIntTree b=(BIntTree) this.getLeftChild();
ce qui me semble désordonné.
De plus, je ne suis pas sûr de ce qui se passerait si j'avais défini ce type de casting et que getLeftChild() retournait null, est-ce qu'une exception serait levée ? Si oui, comment puis-je y remédier étant donné que null est également une valeur valide si elle existe ?