When reading some articles about Scala, I found some examples with a curious syntax, which I might understand incorrectly
class Child[C <: Child[C]]
In addition to the inheritance requirement in JaimeJorge's response, self types can be used to give the outer instance a name if you want to refer to it from an inner class:
scala> class Company(name: String) {
| company =>
| class Department(name: String) {
| override def toString = "Department "+ name +" of "+ company.name
| }
| }
defined class Company
scala> val c = new Company("ACME")
c: Company = Company@56a57bb2
scala> val d = new c.Department("Marketing")
d: c.Department = Department Marketing of ACME