快学Scala 第八课 (嵌套类)

mac2022-06-30  69

嵌套类:

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" }

 

转载于:https://www.cnblogs.com/AK47Sonic/p/7287198.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)