Once the name is resolved, the reference is rewritten as a numeric offset, enabling the Java interpreter to run at full speed. Finally, the storage layout of objects is not determined by the compiler. The layout of objects in memory is deferred to run time and determined by the interpreter. Updated classes with new instance variables or methods can be linked in without affecting existing code. At the small expense of a name lookup the first time any name is encountered, the Java language eliminates the fragile superclass problem.
Libraries can freely add new methods and instance variables without any effect on their clients.
Your life as a programmer is simpler. There is a class named Class , instances of which contain run-time class definitions. If you're handed an object, you can find out what class it belongs to. In the Java language, finding out based on the run-time type information is straightforward. It is also possible to look up the definition of a class given a string containing its name.