A few questions about Object-Oriented Languages in general I was not a big fan of Object-Oriented Languages (OOL), but recently started to learn a bit more about their pros and cons in a general setting instead of diving into one such language.  I have a few questions here:


Do methods in an OOL contain free variables?  If they do, are they statically-scoped?
Do method names live in a different name space than variables?


For both questions, I have kinda guess answers but am not quite sure.  However, I would like to know more about the reasons behind and consequences of OOLs' specific answers to these questions.
The answers to these questions vary with the specific OO language. Here are some fairly generic answers.

Can methods contain free variables?
In general yes.

Are free variables statically-scoped?
It's complicated. As a general rule (with many exceptions), most variables are lexically-scoped, except that the self reference (e.g., this in Java) is  an implicit, dynamically-scoped variable. Many OO languages further rewrite function calls m() to a method invocation this.m() if m is known to be a method of the type of this.

Do method names live in a different name space than variables?
Yes. Method names are not variables: they may not be freely $\alpha$-renamed, since the actual text of the name constitutes part of the interface of an object. They are much more closely related to record labels or module component names. However, method names can interact with binding structure since many OO languages treat method invocations a bit specially (e.g., my answer to #2).