If I'm ever going to design a programming language, it will allow to have different scope/visibility for classes and their individual methods , so that you can locally extend classes (including dynamic dispatch) and have all the benefits of monkey patching without worrying about overriding other people's methods.
Wanna patch Integer to have a 'days' method? Go ahead!
An interesting question: When you define a method
as_byte_array on the String class file-locally and then run
'bleh'.send(:as_byte_array) (which tells the string to perform
'bleh'.as_byte_array() ), what happens ?
Update: An even more interesting, almost philosophical, question: Consider that reuse is probably the most prominent benefit of OO. It's clear that you get only very little of it when methods are only declared locally. On the other hand, you'll also improve the visibility of other reusable methods by avoiding to clutter classes with an overly large number of them. How do you as a programmer decide whether a method should be local or not?