Methods are not kept with the instance of the object. The first time that a class is mentioned in code, the classloader looks for the class and loads in into the "Method Area" which is technically on the heap, but not usually garbage collected. So the methods are just loaded one time per JVM, not a copy per instance. Only variables, things that hold "state", are created per instance.
When it comes time to do late binding (that would be what happens when you override a method) the JVM looks for the method (with the signature that is used, if the method is overloaded) in the location of the sub class, and if it does not have that method then it looks for that method signature in the super class and uses that one instead.
From the JVM Specification
3.5.4 Method Area
It stores per-class structures such as the runtime constant pool, field and method data, and the code for methods and constructors, including the special methods (�3.9) used in class and instance initialization and interface type initialization.
If you use the final keyword for a method, then the JVM never looks for the method in the child class, it goes straight to the super class that has the final keyword. Of course the compiler prevents you from overriding a final method so that you don't get into trouble.
From the JLS Specification
8.4.3.3 final Methods
A method can be declared final to prevent subclasses from overriding or hiding it. It is a compile-time error to attempt to override or hide a final method.
Notice that the hiding refers to final static methods, which are resolved at compile time, and therefore do not do late binding. This means that they are never overriden but can be hidden instead.