Well in your example there isn't any difference, variables one and two are referencing two separate instances of the class 'opel'. Variable titled 'one' could have been assigned to any other object which extends car, or car itself, where variable two can only be assigned to a object of type opel.
One reason you might use the base class to declare the variable without assigning it could be because you don't know what specific class will be used until runtime, say
private Car buildCar(string brandOfCar){
Car car;
switch (brandOfCar){
case "Honda": car = new Honda();
break;
case "Opel": car = new Opel();
break;
}
return car;
}
You could also create an array of Car, and fill it with a mix of objects which extend Car, where if you created an array of Opel, it could only contain Opels.
That said, cars are not good examples, as the brand of the car should probably simply be a property of the class Car, not an actual class which extends car.