嵌套类:

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

快学Scala 第八课 (嵌套类)的更多相关文章

  1. 快学Scala 第十一课 (类继承)

    类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...

  2. 快学Scala 第七课 (类构造函数)

    类 主构造器: class Person (var name: String){ } 主构造参数可以不带val或者var,如果没有被其他方法使用,则不保存为字段. 如果被其他方法使用,则被升格为字段, ...

  3. 快学Scala 第六课 (类getter和setter)

    类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var v ...

  4. 快学Scala 第十课 (包和包对象)

    Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main( ...

  5. 快学Scala 第十三课 (类型层级,对象相等性)

    Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...

  6. 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)

    构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...

  7. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

  8. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

  9. 快学Scala 第二十一课 (初始化trait的抽象字段)

    初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...

随机推荐

  1. “玲珑杯”ACM比赛 Round #11 B -- 萌萌哒的第二题

    DESCRIPTION 一条东西走向的河两边有都排着工厂,北边有n间工厂A提供原材料,南边有n间工厂B进行生产.现在需要在工厂A和工厂B之间建运输桥以减少运输成本.可是每个工厂B只能接受最多6个工厂A ...

  2. MongoDb 快速翻页方法

    翻阅数据是MongoDB最常见的操作之一.一个典型的场景是需要在你的用户界面中显示你的结果.如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化. 接下来,让我们通过一 ...

  3. 如何在GitHub上上传自己的项目

    此文为转载,地址:https://blog.csdn.net/m0_37725003/article/details/80904824 本文链接:https://blog.csdn.net/m0_37 ...

  4. 通过Service访问应用 (1)

    目录 通过Service访问应用  通过Pod IP访问应用  通过ClusterIP Service在集群内部访问  通过Service访问应用 通过之前的操作,应用部署完成了,我们的Demo网站已 ...

  5. 学习笔记-Unity3d代码实现Windows10加载圈圈的效果

    最近在写一个Unity3d的模仿windows10的桌面的程序,由于Unity3d本身不支持Gif图片,所以突发奇想使用代码来实现接近的. 接下来是代码部分:不一一解析,很简单,看的懂原理就Okly了 ...

  6. 新书推荐《再也不踩坑的Kubernetes实战指南》

      <再也不踩坑的Kubernetes实战指南>终于出版啦.目前可以在京东.天猫购买,京东自营和当当网预计一个星期左右上架. 本书贴合生产环境经验,解决在初次使用或者是构建集群中的痛点,帮 ...

  7. android 多行 RadioButton的使用

    最近项目用到了多行RadioButton,随记录下. 先给出RadioButton的布局 <com.kuibu.jucai.widget.MyRadioGroup android:id=&quo ...

  8. Winform应用程序简介

    1.winform应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我们获得信息或传输信息等. WPF技术——XAML美化界面. 2.  F4快速属性 (1)Name:在后台要获得前 ...

  9. 使用JAVA API获取hadoop集群的FileSystem

    所需要配置的参数:  Configuration conf = new Configuration();   conf.set("fs.defaultFS", "hdfs ...

  10. Android手机QQ文件夹解析

    注:切勿修改手机QQ文件夹,以免造成不必要的使用问题及无法修复的数据丢失] 安卓手机QQ tencent文件夹解析 QQ下载的聊天背景:tencent→MobileQQ→system_backgrou ...