Ah, you are Overloading not overriding, there is a big difference.

If you have methods in a base class that you want a derived class to be able to replace then the base class needs to mark them as overridable (similar to virtual in Java), the derived class then needs to mark it's implementation as overrides to get the polymorphic behaviour you want.