What is the difference between the objects 'dc' and 'bcdc', in the following bit of code (C#, may apply to other languages as well):
BaseClass bc = new BaseClass();
DerivedClass dc = new DerivedClass();
BaseClass bcdc = new DerivedClass();
I don't program in C#, but it looks like the answer is the obvious one: dc is of type DerivedClass, and bcdc is of type BaseClass. Therefore all the caveats with new/override happen in methods where a BaseClass is expected, and a DerivedClass may be passed.
If you pass a DerivedClass with override methods, and the overridden method either does or doesn't do some thing that the caller expects, then you will end up with buggy code. To minimize risk, Microsoft recommends that you use the base keyword to call the base method in the overridden one -- although finally, you're responsible for keeping expectations.
new has less impact than override, and therefore appears to be "safer". However, methods that don't use override cannot expect that process to execute everywhere that method is called, which can have unexpected consequences which would be difficult to track. A LoggedWorker with only new methods will gladly get away with not keeping minutes for a meeting() which only expects that Workers of any kind show up. If the new code in the overridden method is critical to the state or operation of the DerivedClass, then you must use override.
My esteemed conclusion is that you shouldn't base your core design around overrides of either kind. Rather, use them as just the right tool in exceptional cases, when you find that you need a creative solution.