叠加特质|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习叠加特质。

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

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


叠加特质

 

内容介绍

一、基本介绍

二、叠加特质应用案例

三、笔记

 

内容简介

学完带有特质的对象动态混入在 Scala 中创建对象共有几种方式?

1new 对象最经典的方式

2apply 创建对象

3匿名子类方式创建

4动态混入

不管是匿名子类还是动态混入本质都是一样的最终在底层都是按照 jvmj 创建对象流程形式上有四种但是本质上归根结底都是一样的最终对象 jvmj 进行创建

 

一、基本介绍

之前是混入一个特质,构建对象的同时如果混入多个特质,称之为叠加特质,那么特质声明顺序从左到右,方法执行顺序从右到左。

 

二、叠加特质应用案例

1、目的:分析叠加特质时,对象的构建顺序,和执行方法的顺序。

2、这个叫混入它本身还是动态混入衍生出来的问题因此还是写在 mixin 中新建一个文件addtraits代表加了很多的特质

package com. atguigu. chapter08. mixin

//看看混入多个特质的特点(叠加特质)

object AddTraits {

def main(args: Array[String]): Unit = {

}

}

trait Operate4 {//特点

printIn("Operae4...")特质也可以直接在里面写东西特质有一部分也是类的东西它在底层会生成一个构造容器

def insert(id: Int)//抽象方法

}

trait Data4 extends Operate4 {//特质继承了 Operate4 ,特质之前是继承

println("Data4")

override def insert(id : Int): Unit= { //override 可以删掉因为是抽象的也可以保留实现/重写Operate4的insert这个特质继承了另外的特质

println("插入数据="+ id)

}

}

trait DB4 extends Data4 {//特质继承 Data4,Data4继承 Operate4,DB4继承 Data4,形成了三级的关系

println("DB4")

override def insert(id: Int): Unit= {//重写 Data4的 insert这里 override 不能删掉删掉会报错

print("向数据库")

super.insert(id)

}

}

trait File4 extends Data4 {//特质继承 Data4

printIn("File4")

override def insert(id :Int): Unit= {//重写 Data4的 inser

print("向文件")

Super.insert(id)//调用 insert 方法不能是 Data4,因为混入就不一定是自己的父类,insert 方法指谁跟混入的顺序有关系这里的 super 在动态混入时不一定是父类

}

}

class MySQL4 {}//普通类

3、现在有四个特质关系用图进行描述

image.png

//说明

//1. 创建 MySQL4实例时,动态的混入 DB4 和 File4,处于最底层

//研究第一个问题,当我们创建一个动态混入对象时,其顺序是怎样的

//1.Operate4....

//2.Data4

//3.DB4

//4.File4也有父特质它也想混入 DB4,它发现 DB4已经被前面走过了于是它不会走第二次因为编辑器在底层它会做一个判断因为父类不可能往上走走两次最终是一个对象所以这个时候就不会再走直接 File4。

创建的流程就完成了

val mysql = new MySQL4 with DB4 with File4 //MySQL4是空的在混入 DB4它会做初始化的动作,DB4虽然是特质但是它也是类的概念名一个类继承时先把父类搞定虽然是个特质但是 scala 中也有类的概念在里面所以在创建时也会把它当作一个父类的概念进行使用同样的道理它构建DB4,但是发现 DB4Data4,Data4有父类 Operate4,因此它首先执行 Operate4,整个流程是按照对象的构建进行所以第一个应该输入 Operate4。

Printlnmysql进行输出

运行可以看到代码跟分析的是一样的

Operate4

Data4

DB4

Fi1e4

//总结一句话

// Scala 在叠加特质的时候,会首先从后面的特质开始执行(即从左到右

//研究第二个问题,当我们执行一个动态混入对象的方法,其执行顺序是怎样的

//顺序是,(1)从石到左开始执行像栈在函数加载时使用栈最后进去的先执行底层函数方法是栈最后的方法先执行(2)当执行到 super 时,是指的左边的特质(3)如果左边没有特质了,则super就是父特质

//1.先执行的是 Fi1e4里面的方法‘’向文件‘’先执行这句话

//调用 super 方法如果不调用就不执行super 不再指的是 Data4因为顺序是从左到右其实在栈中的父类是DB4因为它是动态构建的不是静态的不能认为它的 super 就是 Data4它是动态形成的类类的层级关系已经发生变化了

//当执行到 super 时是指的左边的特质因为对象的层级关系可以理解 DB4Fi1e4的父类执行之后左边的特质是 DB4不是 Data4

建议学习栈二叉树环形链表单向链表双向链表哈希散列

//2.向数据库

//3.插入数据100  把 id一层一层传进来

mysql.insert(100)

}

}

更改println("向数据库")

更改println("向文件")

进行执行可以看到向文件向数据库插入数据=100,到此相对一个动态的综合混入案例包括它的构建执行分析完毕如果看底层可以理解为构建时 MySQL4 已经不是真正的 MySQL4,而是混入了一个新的对象,DB4是它的父特质,File4是它的超级父特质执行时是反过来进行执行的

 

三、笔记

1、课堂练习

在 Scala 中创建对象共有几种方式?

(1)new 对象

(2)apply 创建

(3)匿名子类方式

(4)动态混入

2、叠加特质基本介绍

构建对象的同时如果混入多个特质,称之为叠加特质。那么特质声明顺序从左到右,方法执行顺序从右到左。

3、叠加特质应用案例

目的:分析叠加特质时,对象的构建顺序,和执行方法的顺序。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
8月前
|
存储 Linux C语言
C++/C的内存管理
本文主要讲解C++/C中的程序区域划分与内存管理方式。首先介绍程序区域,包括栈(存储局部变量等,向下增长)、堆(动态内存分配,向上分配)、数据段(存储静态和全局变量)及代码段(存放可执行代码)。接着探讨C++内存管理,new/delete操作符相比C语言的malloc/free更强大,支持对象构造与析构。还深入解析了new/delete的实现原理、定位new表达式以及二者与malloc/free的区别。最后附上一句鸡汤激励大家行动缓解焦虑。
|
供应链 监控 搜索推荐
物联网技术在物流领域的应用会带来哪些影响?
物联网技术在物流领域的应用会带来哪些影响?
1363 58
|
10月前
|
存储 供应链 安全
区块链技术在选举中的应用:透明与安全的新时代
区块链技术在选举中的应用:透明与安全的新时代
374 16
|
前端开发 微服务
开发指南056-定时任务
业务场景中定时任务很常见。平台实现定时任务的原则如下
|
存储 NoSQL 关系型数据库
NoSQL 数据库的优缺点?
NoSQL 数据库的优缺点?
491 4
|
编解码 Oracle iOS开发
VirtualBox虚拟机安装Mac OS X Lion系统详解
VirtualBox虚拟机安装Mac OS X Lion系统详解
828 1
|
机器学习/深度学习 人工智能 编解码
[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究
[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究
|
Kubernetes 负载均衡 算法
在k8S中,Service分发后端的策略是什么?
在k8S中,Service分发后端的策略是什么?
|
新能源
【2023年第十三届APMCM亚太地区大学生数学建模竞赛】C题 中国新能源电动汽车的发展趋势 44页论文、数据及代码
本文在2023年第十三届APMCM亚太地区大学生数学建模竞赛中针对中国新能源电动汽车的发展趋势进行深入研究,建立了多元线性回归、时间序列和机理模型,分析了影响因素、预测了未来发展趋势,并探讨了对全球汽车产业及生态环境的影响,提供了相应的政策分析和市民宣传信。
466 2