if we assign that to car, those features will be lost.Then what is the use of doing like that.
Well, those "features" are not lost. For overriden methods, it is the Honda version that will be called. For new methods, then you could always cast it back to Honda before calling it.
Now why would we want to do this? Generally, you write code using Car, instead of Honda, because you don't need those "features". Think of it this way. Your methods that take a Car, and only work with the Car, can not only work with Honda, but can also work with Toyota, Ford, GM, BMW, Mercedes, KIA, Lexus, etc.
Henry