The class I teach (a class whose teacher I assist1, to be precise) is learning intermediate Java this year (data structures, basic OOP and a few lessons about how Java actually works).
A few of the students have some familiarity with C and it would seem as though this makes some points or subjects difficult for them to understand (such as preprocessor, explicit pointers etc.).
This raises the issue of helping these students overcome the differences between a C mindset and a Java one. It was proven time and again that simply saying "That's just how Java works" is not enough (and frankly not very helpful).
So I'm looking for explanations (or analogies or examples) that might help students see the differences between the two mindsets in a clearer way.
Which points must be present in such an analogy, to properly show the main differences between the two?
1 I'm a teacher assistant in a high school.