Car x = new Vehicle(); is wrong, and Vehicle[] x = new Vehicle(); is wrong.
The 2nd statement is good - no problem with having an iterface declared which points to a concrete implementation of the interface. Best practice actually (abstraction and hiding the implementation).
The 3rd statement is illegal - you cannot declare a concrete implementation which will reference the base class. Why ? you will be missing expected behaviors of the declared type....
The 4th statement is good, similiar to the 2nd statement only with using a base implementing class instead of an interface.
The 5th statement is wrong but easy to fix :
Vehicle[] x = {new Vehicle()};