Quote Originally Posted by mr tinkles
Polymorphism does
Of course polymorphism has everything to do with OOP. I never said otherwise. It was you who said that overloading had everything to do wich OOP, which is incorrect. You mix up the various definitions of polymorphism in the link you posted (overloading is a kind of polymorphism according to that definition, but that kind of polymorphism had nothing to do with OOP), and I only pointed that out.

Quote Originally Posted by mr tinkles
What do you think OOP means?
You're asking me? Want my resume? And while we're at it, may I see yours?

The person who tells others that they don't know enough about some subject, is surprisingly often the one who knows the least about that subject...

Quote Originally Posted by mr tinkles
See the above definition of polymorphism, means having "having multiple forms", NOT multiple names. The example has little or nothing to do with polymorphism.
The example has everything to do with polymorphism. A Ferrari (in my example) is another 'form' of a car; not another name.

Quote Originally Posted by mr tinkles
As defined, may not work reliably. True, all Ferrari's are Car's, but not all Car's are Ferrari's. If drive() method written for Car, and doesn't take potential for Ferrari object, then implicit cast will occur and you will lose Ferrari functionality in drive() method and get just Car (will need to cast back to Ferrari object).
Correct. And this is precisely the problem with your so-called overloading example 'method (Object o1, Object o2, ...N)'. Again, I only pointed that out using this example. The only one you're arguing with here is yourself.

Quote Originally Posted by mr tinkles
Not a good OO example. Ferrari different than Car, though is car. Do you take your Ferrari to a Car mechanic?
Why not? A ferrari is a 'form' of a car (in your speak), so it supports everything a normal car does. So if it doesn't work because of a simple 'car' problem, any Car mechanic can fix it. That's the whole point of polymorphism. The Ferrari -> Car (Or Student -> Person) example is a famous (or infamous) one. And now you're saying it's a bad example? That's a good one!

Quote Originally Posted by mr tinkles
That's a good thing? And when an object that doesn't have drive() is passed, what now? I can call unknown methods on unknown objects, how it that good?
It's not good OR bad. It's different. It allows you to do either very stupid things, or very great things, depending on your knowledge and experience. And it's totally different from Java (or C++).