温故知新|学习笔记

简介: 快速学习温故知新。

开发者学堂课程【Scala 核心编程-基础:温故知新】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/9014


温故知新

 

内容介绍

动态混入

二、叠加特质

特质构造顺序

四、扩展类的特质

五、嵌套类

六、类型投影

七、隐式转换

 

一、动态混入

1、使用方式和基本语法需要了解动态混入的基本语法如下

val oracleDB = new OracleDB with Operate3

用with关键字直接将需要混入的特质混进去如果有多个需要混入就在后面加 with 特质即可

2、动态混入的好处是可以实现 ocp 原则开闭原则就是在用动态混入的方式给一个对象增加功能时并不会影响类的本身这是动态混入最基本的原则和规则

 

二、叠加特质

1、叠加特质是混入时有多个特质一旦实现混入多个特质就有很多语法规则需要去遵守这里面有两个规则特别重要第一个在混入时它的构建顺序是什么第二个当叠加特质之后执行叠加过后产生的方法时它的执行方法顺序是什么这是一个考点也是看源代码的核心点

2、叠加特质的构建顺序执行方法顺序在这里面用到的 super 关键字是什么

叠加特质的构建顺序是从左往右在构建过程中它仍然遵循如果构建时混入特质父特质也要往上追执行方法的顺序是从右往左如果在这个过程中让 super 指向父特质在 super 后面加上中括号里面写它父特质的名称

3、如果想要调用具体特质的方法,可以指定: super[特质(.xxx(···)其中的泛型必须是该类的直接超类类型

 

三、特质构造顺序

在进行混入时它首先混入的类也有构造器时要注意顺序第一种和第二种主要的区分是第一种声明类的同时混入特质先是把它当作一个整体在混入时这个对象并没有创建成功所以它是按照声明的混入顺序一步一步构建的第二种在构建对象时动态混入特质可以理解成先把对象创建好之后再逐一混入特质

 

四、扩展类的特质

一个特质可以继承另外一个类特质就可以用继承这个类的方法相当于扩展了 trait 的功能在扩展功能之后用混入的方式混入特质时那么对象就拥有了相应的功能这就是扩展类的特质


五、嵌套类

1、嵌套类更多的情况是源码会用到一般情况下在开发时应当避免使用到嵌套类实际上如果真的用到嵌套类说明水平很高做 java 开发很少用到内部类更多的是用来看源码可能有面试的时候会问到

2、scala 嵌套类和 java有什么区别有两点区别第一个是嵌套类的对象是跟外部的对象相关的java 是创建一个内部类的对象它只跟内部类型有关系在 scala 中Scala 创建内部类的方式和 Java 不一样,将 new 关键字放置在前,使用对象.内部类的方式创建说明内部类或者是嵌套类它其实跟外部外部对象有密切关系但是 java 不是这样的java 只能内部类型有关系直接导致一个问题如何解决这个问题在 scala 中提供了类型投影解决这个问题

 

六、类型投影

前面加上外部类的名称#再写上内部类的名字这样称之为类型投影它的作用就是屏蔽外部对内部对象的影响

 

七、隐式转换

1、隐式转换在看代码时有时输入一个值但是可以通过其实是隐式转换起了很大的作用

2、比如 val num: Int=3.53.5给了 int写一个隐式转换的函数

implicit def f1(d:Double): Int= {//底层 生成f1$1

d.toInt

}

它把隐式函数作用在3.5上因此在看源代码看不懂时可以反编译查看

3、idea    就是只要看到有实线的下划线一定会出现隐式转换

相关文章
|
8月前
|
算法 安全 Java
2023年Java核心技术第十三篇(篇篇万字精讲)
2023年Java核心技术第十三篇(篇篇万字精讲)
64 1
|
7月前
|
存储 安全 编译器
【C++】C++入门必备知识详细讲解
【C++】C++入门必备知识详细讲解
199 0
|
6月前
|
编译器 Linux C语言
C++Primer 【学习笔记】第一章 深思
main 函数在很多方面都比较特别,其中最重要的是每个 0+程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显式调用的函数。
34 0
|
7月前
|
安全 编译器 C语言
C++入门必备知识
C++入门必备知识
40 0
|
8月前
|
Java
湖南大学Java编程题2. 找朋友
湖南大学Java编程题2. 找朋友
|
8月前
|
存储 安全 Java
2023年Java核心技术面试第六篇(篇篇万字精讲)
2023年Java核心技术面试第六篇(篇篇万字精讲)
50 0
真正的入门—提高班的学习
前几天开始了自己的计算机二级考试(C++),遵循三步走的战略(略读知宏观、详读知内容、做题看实战)、第一阶段结束之后,稍作总结就开始了第二阶段的学习,因为我们小团队采用化整为零细分学习的方法
|
存储 安全 编译器
【C++入门必备知识】
库里的名称我们无法改变,那我们可以将自己定义的名称放在命名空间里,当需要时指令访问即可。 那怎么定义命名空间呢?
63 0
|
设计模式 Scala 开发者
温故知新 | 学习笔记
快速学习温故知新
39 0
|
算法 Scala 开发者
作业说明和温故知新 | 学习笔记
快速学习作业说明和温故知新
62 0