Why are you passing information to the car method that the car already knows? It's like me telling you, "Hey, Eric, tell people that your name is Eric and that you're a guy." when I should just say "Hey, dude, please tell people your name and gender.
You can eliminate the parameters altogether and make the code simpler.
Think about that design some more. What's to keep someone from doing this:
You wouldn't want that, would you?
Kidding aside, the design breaks the Car object's encapsulation. Knowledge about a Car should be kept inside the Car as much as possible. By making field values that should be private available to the public, you lose control of that information. In the real world, you'd be opening up to identity or information theft. Objects should guard their personal information jealously.
so am i correct in saying that no variables should be available to be manipulated from outside the class, it all needs to be done through methods
If you want to preserve an object's encapsulation, yes, that's correct. Access to object attributes should be strictly limited and if necessary, be done through accessor (getter) and mutator (setter) methods. Encapsulation is quite a lengthy topic of discussion and I'd encourage you to read what Joshua Bloch writes about it in his book, "Effective Java Programming" -- Edit: sorry, I think Joshua actually writes extensively about inheritance in his book.