In object-oriented programming, the way the program looks up the right code to run when a method with a given name is called ("invoked") on an object. The method is first looked for in the object's class, then that class's superclass and so on up the class hierarchy until a method with the given name is found (the name is "resolved"). Generally, method lookup cannot be performed at compile time because the object's class is not known until run time. This is the case for an object method whereas a class method is just an ordinary function (that is bundled with a given class) and can be resolved at compile time (or load time in the case of a dynamically loaded library).