特质快速入门案例|学习笔记

简介: 快速学习特质快速入门案例。

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

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


特质快速入门案例

 

目录:

一、trait 的声明

二、Scala 中 trait 的使用

三、特质的快速入门案例

 

一、trait 的声明

1、基本语法

trait 特质名{

trait 体

}

2、命名规范

trait 命名一般首字母大写。如:Cloneable , Serializable

object T1 extends Serializable {

}

Serializable: 就是 scala 的一个特质。

在 Scala 中,所有 Java 中的接口可以当做特质来使用。

3、案例

(1) 案例:Serializable

新建 New Package,Enter new package name为mytrait。再新建Create New Scala Class,Name为TrailtDemo01,Kind为object。

打开编辑:

package com.atguigu.chapter08.mytrait

object TraitDemo01 {

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

}

}

object T1 extends Serializable {

}

这里的 Serializable 是 Java 的一个特质,继承了 io。点击 Serializable,按快捷键 Ctrl+b,看程序提示:

/.../

package scala

/**

* Classes extending this trait are serializable across platforms (Java, .NET).

*/

trait Serializable extends Any with java.io.Serializable

可以看到:Serializable 变成一个 trait,实际就是 Java 的接口。所以,在 Scala 中,所有 Java 中的接口可以当做特质来使用。

Serializable 继承 Any。Any 是所有类的父类。如果表示为 Serializable 是一个接口去继承一个类,比较难理解。但trait是接口和抽象类的结合体,它去继承类,是容易理解的。

说明:trait Serializable extends Any with java.io.Serializable

在 scala 中,java 的接口都可以当做 trait 来使用(如上面的语法)

(2) 案例:Cloneable

除了 Serializable 可以包装成 trait 外,还有 Cloneable 也可以。

object T2 extends Cloneable {

}

点击 Cloneable,按快捷键 Ctrl+b,程序提示:

/.../

package scala

/**

* Classes extending this trait are cloneable across platforms (Java.NET).

trait Cloneable extends java.lang.Cloneable

可以看到 Cloneable 也做了包装。

 

二、Scala 中 trait 的使用

一个类具有某种特质(特征),就意味着这个类满足了这个特质(特征)的所有要素。所以在使用时,也采用了 extends关键字,如果有多个特质或存在父类,那么需要采用 with 关键字连接

1、没有父类。

一个类需要继承特质,该类没有父类,想继承多个特质,语法如下:

class 类名 extends 特质1  with 特质2  with 特质3...

2、有父类

需要继承特质又要继承父类。需先继承父类,再继承特质。语法如下:

class 类名 extends 父类 with 特质1  with特质2  with 特质3

 

三、特质的快速入门案例

1、可以把特质看作是对继承的一种补充

Scala 的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的纯洁性,比 c+中的多继承机制简洁。但对子类功能的扩展有一定影响。所以认为: Scala 引入 trait 特征,可以替代Java的接口,也是对单继承机制的一种补充。

图片7.png

图中,B 类、C 类继承 A 类。E 类、F 类继承 D 类。需要将 C 类和

E 类能够增加一个方法获取数据库的连接。这个方法可以不一样。

如,C 类是连接的 MySQL 数据库,E 类连接的是 Oracle 数据库。这个方法规范需要在 trait 里面定义,这是 trait最经典的应用方法。

定义一个规范让对应的类实现。

2、案例

在 mytrait 目录下新建 Create New Scala Class,Name为TraitDemo02,Kind为Object。打开编辑:

package com.atguigu.chapter08.mytrait

object TraitDemo02 {

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

val c = new C()

val f = new F()

c.getConnect() //连接mysql数据库...

f.getConnect() //连接oracle教据序...

}

}

//按照要求定义个 trait

trait Trait01 {

//定一个规范

def getconnect( )

}

//先將六个类的关系写出

class A {}

class B extends A {}

class C extends A with Trait01{

override def getConnect(): Unit = {

println("连接mysq1数据库...")

}

class D {}

class E extends D {}

class F extends D with Trait01 {

override def getConnect(): Unit = {

println("连接oracle数据库...")

}

}

先將六个类的关系写出,然后按照要求定义个 trait,再一个规范Trait 类既有接口的特性,又有抽象类的特性。trait Trait01 声明抽象的方法。def getconnect()这里是一个抽象化。

再对 class C、class F 进行扩展。添加关键词 with,当写上 with Trait01时,C 下出现红色波浪线,报错。把光标定到 C 处,按快捷键 alt+enter,在弹出的 Select Members to Implement窗口选择 getConnect0: Unit 点击 OK。在设置输出字符。

然后创建 val c 类等于 new C(),val f 类等于 new F()。最后调用 c.getconnect()连接 mysql 数据库...,调用f.getConnect()连接 oracle 数据库...

运行结果如下:

连接 mysql 数据库...

连接 oracle 数据库...

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
8月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
504 83
|
7月前
|
JSON JavaScript API
MCP 实战:用配置与真实代码玩转 GitHub 集成
MCP 实战:用配置与真实代码玩转 GitHub 集成
1629 4
|
9月前
|
测试技术 C++ 索引
除了代码审查,还有哪些方法可以预防数组越界问题?
除了代码审查,还有哪些方法可以预防数组越界问题?
254 56
|
9月前
|
设计模式 Java uml
08.面向对象的特性
本文详细介绍了面向对象编程的核心特性:封装、抽象、继承和多态。封装通过限制访问保护数据,提高代码可维护性和易用性;抽象隐藏实现细节,关注功能本身,增强代码扩展性;继承表示类间的“is-a”关系,解决代码复用问题,但需谨慎使用以避免复杂性;多态允许子类替换父类,提升代码扩展性和复用性,是设计模式的基础。此外,文章还探讨了面向对象分析与设计(OOA/OOD)、UML建模语言以及这些特性在实际编程中的应用。最后提供了多个学习资源链接,涵盖Java、C/C++、Android开发及算法等内容,适合开发者深入学习面向对象思想及相关技术。
283 10
|
机器人 C++ Python
ROS2教程 02 功能包
本文是关于ROS2(机器人操作系统2)中功能包(package)管理的教程,介绍了如何检查功能包的依赖、创建新功能包、列出可执行文件、列出所有功能包、查询功能包的位置和描述信息,以及为C++和Python功能包配置必要的文件。
573 0
|
SQL 安全 数据库
如何构建一个安全的Web应用:技术与策略的全面指南
【6月更文挑战第12天】构建安全Web应用的全面指南:了解SQL注入、XSS等威胁,采用输入验证、安全编程语言,配置安全服务器和数据库,使用HTTPS,实施会话管理、访问控制,正确处理错误和日志,定期进行安全审计和漏洞扫描。确保用户数据和应用安全。
|
数据采集 网络安全 文件存储
快速部署 OpenFOAM 社区版
OpenFOAM(Open Source Field Operation and Manipulation)是对连续介质力学问题进行数值计算的软件。可进行数据预处理、后处理和自定义求解器,常用于计算流体力学领域。本文介绍如何通过计算巢快速部署OpenFOAM社区版服务。
快速部署 OpenFOAM 社区版
|
安全 前端开发 Java
Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(下)
Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(下)
|
机器学习/深度学习 PyTorch 算法框架/工具
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
YOLO目标检测专栏探讨了模型创新,如注意力机制,聚焦通道和空间信息的全局注意力模组(GAM),提升DNN性能。GAM在ResNet和MobileNet上优于最新方法。论文及PyTorch代码可在给出的链接找到。核心代码展示了GAM的构建,包含线性层、卷积和Sigmoid激活,用于生成注意力图。更多配置详情参阅相关博客文章。
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow的保存与加载模型
【4月更文挑战第17天】本文介绍了TensorFlow中模型的保存与加载。保存模型能节省训练时间,便于部署和复用。在TensorFlow中,可使用`save_model_to_hdf5`保存模型结构,`save_weights`保存权重,或转换为SavedModel格式。加载时,通过`load_model`恢复结构,`load_weights`加载权重。注意模型结构一致性、环境依赖及自定义层的兼容性问题。正确保存和加载能有效利用模型资源,提升效率和准确性。