嵌套类:

class Human {
class Student{
val age = 10
}
} object ClassDemo {
def main(args: Array[String]): Unit = {
val h = new Human
val s = new h.Student
println(s.age)
}
}

有时会遇到这种情况:

class Human {
class Student {
def addS(s: Student) = {
val ab = new ArrayBuffer[Student]()
ab += s
}
}
} object ClassDemo {
def main(args: Array[String]): Unit = {
val h = new Human
val h2 = new Human
val s = new h.Student
val s2 = new h2.Student
s.addS(s2)
}
}

以上addS会报错,因为方法只能接收h.Student不能接收h2.Student。

解决方法有2个:

1. 类型投影

import scala.collection.mutable.ArrayBuffer

class Human {
class Student {
def addS(s: Human#Student) = {
val ab = new ArrayBuffer[Human#Student]()
ab += s
}
}
} object ClassDemo {
def main(args: Array[String]): Unit = {
val h = new Human
val h2 = new Human
val s = new h.Student
val s2 = new h2.Student
s.addS(s2)
}
}

2. 伴生对象

object Human {
class Student { }
} class Human {
def addS(s: Human.Student) = {
val ab = new ArrayBuffer[Human.Student]()
ab += s
}
} object ClassDemo {
def main(args: Array[String]): Unit = { val h = new Human
val s = new Human.Student
val s2 = new Human.Student h.addS(s)
h.addS(s2) }
}

嵌套类要访问外部类有2种方式:

1. 外部类.this

class Human {
val name = "Sky"
class Student {
println(Human.this.name)
def addS(s: Student) = {
val ab = new ArrayBuffer[Student]()
ab += s
}
}
}

2. “自身类型”

class Human {
outter =>
class Student {
println(outter.name)
def addS(s: Student) = {
val ab = new ArrayBuffer[Student]()
ab += s
}
} val name = "Sky"
}
05-11 20:23