9.4 嵌套类
在 Scala中,你几乎可以在任何语法结构中内嵌任何语法结构。如在类中可以再定义一个类,这样的类是嵌套类,其他语法结构也是一样。
嵌套类类似于 Java 中的内部类
package com.atguigu.day09
import com.atguigu
import com.atguigu.day09
object InnerDemo {
def main(args: Array[String]): Unit = {
// 创建外部类对象
val outer = new Outer
// 创建普通的成员内部类对象(内部类要持有外部类的对象)
val inner = new outer.Inner
outer.name = "张三"
inner.foo();
// 创建静态内部类对象
val inner2 = new Outer.StaticInner
inner2.foo()
}
}
class Outer {
// 给外部类添加别名
my =>
var name = "李四"
// 普通的成员内部类
class Inner {
def foo(): Unit = {
// 访问方式1
println(name)
// 访问方式2
println(Outer.this.name)
// 访问方式3 使用别名
println(my.name)
}
}
}
object Outer {
my=>
var age = 10
// 静态内部类. 因为伴生对象中的所有成员都会编译成Java中的静态的成员
class StaticInner {
def foo(): Unit ={
// 访问方式1
println(age)
// 访问方式2
println(Outer.age)
// 访问方式3
println(Outer.this.age)
// 访问方式4
println(my.age)
}
}
}
类型投影
看下面的问题:
如何解决问题呢?
在方法声明的时候使用外部类#内部类
这样的类型, 表示忽略内部类的对象关系.
等同于Java中内部类的语法操作,我们将这种方式称之为 类型投影(即:忽略对象的创建方式,只考虑类型)