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中内部类的语法操作,我们将这种方式称之为 类型投影(即:忽略对象的创建方式,只考虑类型)

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-07-02 08:12:45

results matching ""

    No results matching ""