It may seem like this type of lookup could really slow a program down. An interesting aspect of a method definition, is that once a method is defined, that method name and definition are, in a sense global , and can be used anywhere. This gives newObject a chance to handle messages sent to it that it doesn't understand. This type of usage is called delegation, and it is a powerful method of implementing various different constructs such as multiple inheritance, journaling, and dispatching messages to dynamically loaded code. Incidentally, there are proper ways to handle unrecognized message, using Protocols, that allow for compile time checking and more robust code.
Most programmers avoid defining un-typed objects unless it's really useful.
That example wasn't entirely correct. Methods that are implemented in the implementation section but are not described in the interface become, in essence, private methods that can only be used by that class and not by another class. Power through Customization One of the most frustrating aspects of using classes written by other people is that these classes often don't contain some key functionality that you need. But this creates another problem. Now you have to tell everyone else to use your particular subclass and not the original class.