I have a BinarySearchTree class which is built using a BinaryTree class. Now I want to build a RedBlackTree class by subclassing the BinarySearchTree class. The problem is that the BinaryTree class doesn’t have a field for color. So, I created a ColorBinaryTree class that’s a subclass of the BinaryTree class. Here’s where I get a little confused. In my BinaryTree class I have the following method
protected BinaryTree<E> parent(){
return parent;
}
where parent is obviously another BinaryTree. In my RedBlackTree class, I will need to be able to access parents of ColorBinaryTree objects as well. However, I can’t just use the method inherited from the BinaryTree class because that returns a BinaryTree object which means I can’t access the color. With the following code I get an error
ColorBinaryTree<E> parent = newNode.parent();
where newNode is a ColorBinaryTree object. So it seems to me the only way to do it is to overwrite the above method in my ColorBinaryTree sublcass like so.
@Override
protected ColorBinaryTree<E> parent(){
return parent;
}
Am I missing some way to get aorund this or do I just have to go and override all of the methods that return BinaryTree objects? If so it seems kind of a waste since the body of the methods are exactly the same.
Is there a reason you’re not casting the result of the superclass’s parent function?
Like this:
Also kind of a pain, but probably what you’re looking for.
The best way to deal with it, is to probably override all of the functions from your base class returning BinaryTree with a method that returns ColorBinaryTree. Then in the implementation of the child class call the parent’s method and perform the cast there before returning. That way you don’t have a million casts spread out in your code. It might look like this: