What a weird example. You are one confused dude. First you freak out when I asked if you were claiming: taxi<>vehicle you said "AAAAARRRRGGGGGHHHHHH!!!!!!!" but later in that same message you state "In all cases it's still a Vehicle since it's a child of the Vehicle class, but we don't call it that anymore" which means Vehicle<>Taxi
In your example the "WhatDoICallIt" property is purely arbitrary so the example does not work. The property could be set to "dEf$". We are debating the nature of something, not arbitrary labels
The ocean water example is the simplest - no complicated concept to comprehend. Lets try it again so you can understand your error:
I go to the beach.
I take a cup.
I fill the cup with ocean water.
100% of the contents of the cup = ocean water.
But:
100% of ocean water<> the contents of my cup.
You seem to be claiming that since the cup does not contain all of the available ocean water than I can not say the contents of my cup=ocean water.
To sum up:
the contents of my cup=ocean water
ocean water<>the contents of my cup
the contents of my cup=firmware
ocean water=software
WRONG! I obviously went over your head using basic object-oriented programming terminology. Changing a property of an object does not change the nature of the entire object, it only changes that property, in this case "WhatDoICallIt."
I honestly do not know how to explain it to you more simply than I have tried. Set theory and OO is beyond you.
One last try though. Do you get the joke, "The definition of an Infidel: A Christian in Saudi Arabia or a Muslim in Alabama."?
I agree with antiRepublicrat. You dont seem to be seeing his point.
A vehicle class has many properties. A derived class is still a vehicle, but may override some of the properties. It is still a vehicle, but it is CALLED a taxi, or bus, or car (instead of the default "vehicle")
The vehicle CLASS has a property containing TEXT "vehicle" by default, but it could just as easily contain "xxx" as default, or better "name me" as default.