快学Scala 第八课 (嵌套类)
嵌套类:
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 第八课 (嵌套类)的更多相关文章
- 快学Scala 第十一课 (类继承)
类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...
- 快学Scala 第七课 (类构造函数)
类 主构造器: class Person (var name: String){ } 主构造参数可以不带val或者var,如果没有被其他方法使用,则不保存为字段. 如果被其他方法使用,则被升格为字段, ...
- 快学Scala 第六课 (类getter和setter)
类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var v ...
- 快学Scala 第十课 (包和包对象)
Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main( ...
- 快学Scala 第十三课 (类型层级,对象相等性)
Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...
- 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)
构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...
- 快学Scala 第四课 (多维数组,与Java集合的互操作)
Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...
- 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)
定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...
- 快学Scala 第二十一课 (初始化trait的抽象字段)
初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...
随机推荐
- “玲珑杯”ACM比赛 Round #11 B -- 萌萌哒的第二题
DESCRIPTION 一条东西走向的河两边有都排着工厂,北边有n间工厂A提供原材料,南边有n间工厂B进行生产.现在需要在工厂A和工厂B之间建运输桥以减少运输成本.可是每个工厂B只能接受最多6个工厂A ...
- MongoDb 快速翻页方法
翻阅数据是MongoDB最常见的操作之一.一个典型的场景是需要在你的用户界面中显示你的结果.如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化. 接下来,让我们通过一 ...
- 如何在GitHub上上传自己的项目
此文为转载,地址:https://blog.csdn.net/m0_37725003/article/details/80904824 本文链接:https://blog.csdn.net/m0_37 ...
- 通过Service访问应用 (1)
目录 通过Service访问应用 通过Pod IP访问应用 通过ClusterIP Service在集群内部访问 通过Service访问应用 通过之前的操作,应用部署完成了,我们的Demo网站已 ...
- 学习笔记-Unity3d代码实现Windows10加载圈圈的效果
最近在写一个Unity3d的模仿windows10的桌面的程序,由于Unity3d本身不支持Gif图片,所以突发奇想使用代码来实现接近的. 接下来是代码部分:不一一解析,很简单,看的懂原理就Okly了 ...
- 新书推荐《再也不踩坑的Kubernetes实战指南》
<再也不踩坑的Kubernetes实战指南>终于出版啦.目前可以在京东.天猫购买,京东自营和当当网预计一个星期左右上架. 本书贴合生产环境经验,解决在初次使用或者是构建集群中的痛点,帮 ...
- android 多行 RadioButton的使用
最近项目用到了多行RadioButton,随记录下. 先给出RadioButton的布局 <com.kuibu.jucai.widget.MyRadioGroup android:id=&quo ...
- Winform应用程序简介
1.winform应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我们获得信息或传输信息等. WPF技术——XAML美化界面. 2. F4快速属性 (1)Name:在后台要获得前 ...
- 使用JAVA API获取hadoop集群的FileSystem
所需要配置的参数: Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs ...
- Android手机QQ文件夹解析
注:切勿修改手机QQ文件夹,以免造成不必要的使用问题及无法修复的数据丢失] 安卓手机QQ tencent文件夹解析 QQ下载的聊天背景:tencent→MobileQQ→system_backgrou ...