I'm taking a course in Pharo (Smalltalk implementation). There is a small detail I don't really understand about the language.

The professor speaks of **late self binding** and **static super binding**. From what I understand of static binding the compiler knows at compile-time what my super class is. This seems logical as there is no multiple inheritance (as far as I know by now) so there can only be one super. So it just has to look at the inheritance tree and take the parent.

The **late self binding** is something I don't quite grasp. How I see it, is that the compiler can know which class it's compiling if you will, so it knows the type. So why can't it determine if it's compiling class Foo, that self is pointing to Foo? That is, if self always points to the current instance of the class Foo?