Q:

When And Where To Use Object Instance and Class name in Grails?

I have been confused, by seeing the code(actually an test code) : 
def user = new User(userId:'anto',password:'xxxx')
        user.addToPosts(new Post(content:"First"))
        def foundUser = User.get(user.id)

In the above code, I have created a object for User class and named as user. If I replace the line : 
def foundUser = User.get(user.id)

To something like this,
def foundUser = user.get(user.id)

I.e I have changed from class name User to user object name. And when I run the test, it doesn't throw me any error. 
But when I change this line to : 
user.addToPosts(new Post(content:"First"))

To something like, 
User.addToPosts(new Post(content:"First"))

I'm getting an error! So what happens behind the scenes? For which scenarios I have to use the object name and for which scenarios class name? And Why?
Thanks in Advance.

A:

get() is a static method on the User class since it has nothing to do with an individual instance - it returns an instance. So you typically call it on the class, but you can also call static methods on instances. If you do this in Java your IDE will warn you that it will work but shouldn't be done, but I doubt any IDE does this for Groovy (yet).
addToPosts() is an instance method since it must be called on an instance to add a Post to a User instance's posts collection. You can't call it on the class since that makes no sense - the class doesn't have a posts collection to add to.

