In a taxi company management application, an object of the the Taxi class would be representing a physical taxi. Duh.
Guess what, in the application here we have a Person class to represent people, and a (believe it or not) Vehicle class to represent vehicles. In our case we don't extend Vehicle because we only need a small set of information that's generalized to all vehicles on the road, like what model it is. However, if we were told to specifically track, say, government-owned vehicles, we would extend the Vehicle class to handle all the extra information and processes associated with a government-owned vehicle.
So you would make a Vehicle class that had loads of properties and methods not used in most of the instantiated objects of class Vehicle. A motorcycle is going to have an unused method "RaiseBed" because you put that into Vehicle to handle dump trucks. Just unbelievable.
If you are indeed employed as a programmer, do not let your employer see your posts if you value your job.
We are not talking about a software application - we are talking real-world implementation. DUH!
We are not talking about an abstract representation of a Taxi, we were talking about a real Taxi.
You can not apply OO concepts to the real-world - you CAN represent abstractions of the real world with OO concepts but that was not what you were trying to do.