I understand the use for explicitly typed self-references:
trait T { self : T2 => ... }
In the body, self is an alias f
self
In that case self is a another way of saying this.
this
If you happen to have an inner class, however, this inside the inner class would be the inner class, and self would be the container class.
That's the only difference AFAIK