开发者学堂课程【Scala 核心编程-基础:叠加特质的注意事项和细节】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8996
叠加特质的注意事项和细节
内容介绍
一、叠加特质注意事项和细节
二、叠加特质的课堂练习
三、整理
一、叠加特质注意事项和细节
1、特质声明顺序从左到右。
2、Scala 在执行叠加对象的方法时,会首先从后面的特质(从右向左)开始执行。
3、Scala 中 特质中如果调用 super,并不是表示调用父特质的方法,而是向前面(左边)继续查找特质,如果找不到,才会去父特质查找。
4、如果想要调用具体特质的方法,可以指定: super[特 质....).其中的泛型必须是该特质的直接超类类型。可以指定,但是不能跳着指定。
5、//如果我们希望直接调用 data4的 insert 方法,指定,如下
前面顺序不变,构建顺序没有任何影响
// 1. operate4. . .
// 2. Data4
//3. DB4
//4.File4
找到 File4,执行向文件,super 明确指定 data4,那就不会再到界面看,data4,直接插入数据,第一向文件,第二插入数据。
trait File4 extends Data4 {
println("File4")
override def insert(id: Int): Unit= {
print("向文件")
super[Data4].insert(id)
}}
执行代码,向文件,插入数据=100,需要注意 super[Data4].insert(id)指定有要求,//说明 super[?] ?的类型,必须是当前的特质的直接父特质(超类),Data4继承 operate4,改成 operate4,从语法上看没有报错,但是执行,会出现提示信息,不是 file4的父类,要注意语法的区别。
二、叠加特质的课堂练习
要求:修改一下构建对象的混入多个特质的顺序,请学员说出输出结果。
Println(‘’==============================‘’)
//练习题
Val
mySQL4 = new MySQL4 with
File4 with DB4
mySQL4. insert(999)
//构建顺序
// 1. operate4. . .
// 2. Data4
// 3. File4
// 4. DB4
//执行顺序
先看 DB4面 insert,执行向数据库。
//1.向数据库
super 看 file4。
//2.向文件
向文件突然出现 super[data4].insert(id),不用往左边看,刚好混合在一起,等价,不写就相同,因为左边没有了。再找 data4。
//3.插入数据=999
运行,运行结果如下,
==============================
Operate4...
Data4
Fileh
DB4
向数据库
向文件
插入数据= 999
三、整理
1、叠加特质注意事项和细节
(1)特质声明顺序从左到右。
(2)Scala 在执行叠加对象的方法时,会首先从后面的特质(从右向左)开始执行。
(3)Scala 中特质中如果调用super,并不是表示调用父特质的方法,而是向前面(左边)继续查找特质,如果找不到,才会去父特质查找。
(4)如果想要调用具体特质的方法,可以指定: super[特质xxx(...),其中的泛型必须是该特质的直接超类类型,不能随意让它跑,那样会打破继承关系。
2、课堂练习
要求:修改一下构建对象的混入多个特质的顺序,请学员说出输出结果。
//练习题
Val
mySQL4 = new MySQL4 with
File4 with DB4
mySQL4. insert(999)
//构建顺序
// 1. operate4. . .
// 2. Data4
// 3. File4
// 4. DB4
//执行顺序
//1.向数据库
//2.向文件
//3.插入数据=999