18_Scala面向对象编程trait

文章目录

  • trait
  • 1.定义trait
  • 2.向类中混入特质
    • 2.1没有父类
    • 2.2有父类
  • 3.动态混入
    • 3.1动态混入查询功能到公司业务中
  • 4.父类,子类,特质初始化优先级
  • 5.Scala功能执行顺序
  • 6.常用API

trait

–特质的学习需要类比Java中的接口,源码编译之后就是interface

–scala中没有接口的概念;

–scala可以将多个对象中相同的特征从对象剥离出来,形成一个独立的语法结构 => 特质trait
如果一个对象符合这个特质,那么可以将特质混入到这个对象中

–目的:增加约束,功能补充和叠加

–如果混入多个相同的特质,为避免出现钻石问题,需要定义一个执行的顺序

1.定义trait

trait Run{def run():Unit 
}

特质中的方法是抽象方法(模板)

2.向类中混入特质

–如果有父类,采用with
–如果没有父类,采用extends
–混入多个特质,第一个用extends其余都用with

2.1没有父类

class Cat extends Run {override def run(): Unit = println("Cat run")
}

2.2有父类

class Stu extends person with Run {override def run(): Unit = println("Stu run")
}class person{}

–混入特质需要重写特质的所有抽象方法

–scala中抽象方法不需要定义,没有方法体就是抽象方法,抽象类需要加abstract

–学习时候要类比Java接口,但是特质可以继承类,接口不行

3.动态混入

–引入目的:方便程序开发OCP原则;
–开发程序代码:空难扩展开放OPEN,功能修改关闭CLOSE
–注意:OCP原则不要拿父类继承来 做OCP原则,原因是父类继承,是一种模板思想,而非程序OCP思想
–OCP原则最佳使用trait,在构建对象的时候,将新的功能混入到对象中

3.1动态混入查询功能到公司业务中

//  3.trait动态混入   也就是构建对象的时候用with进行功能混入;
class Accompany{val user = new User() with selectuser.selectUser()
}
trait select{def selectUser(): Unit = {println("select * from emp_user")}
}

小结:动态混入也就是构建对象的时候直接使用with混入特质

4.父类,子类,特质初始化优先级

trait > current class

parent > trait > current class

多个特质情况下,从左到右依次执行

left trait > right trait

5.Scala功能执行顺序

–类混入特质也存在钻石问题,但是scala采用了一种特殊的方式–功能叠加
–如果混入多个相同的特质,为避免出现钻石问题,需要定义一个执行的顺序
“此处的执行顺序就是初始化顺序的反向操作”

执行顺序跳级到xxx
前提需要有继承关系
super[xxx].operateDate()    跳级执行操作
trait Operate {def operatedata(): Unit = {println("处理数据")}
}trait Database extends Operate {override def operatedata(): Unit = {print("Database")super.operatedata() //整体意思就是Database处理数据}
}trait Log extends Operate {override def operatedata(): Unit = {print("Log   ")//此处的super表示上一级的super 此处上一级为DataBase,原因是功能一层一层包     特质中,重写的方法中使用super表示上一级super.operatedata()}
}//上述所示,Database和Log两个都继承自Operate; MySQL同时继承自Databse和Log
class MySQL extends Database with Log { //Log   Database处理数据    结果没有意义//实例化MySQL对象,后       父类 特质等方法直接可以调用,不需要重写
}

//Log Database处理数据

图解如下

在这里插入图片描述

注意要点:

1.特质就是扩展功能,一级一级的扩展;

2.即便是特质的扩展也是优先初始化父类;

3.初始化完成后调用的时候是由外向内一层一层调用;

4.可以进行跳级调用 super[xxx].operaterData();

在这里插入图片描述

6.常用API

//  判断对象是否是某个类的实例
println(mysql.isInstanceOf[Operate])    //true
//  将对象转化为某个类的实例
val value1 = mysql.asInstanceOf[Object]
println(value1)       //_18Scala面向对象编程trait.Demo02$MySQL@19bb089b
//  获取类的信息
val value = classOf[Operate]
println(value)        //interface _18Scala面向对象编程trait.Demo02$Operate

Scala中

双等号 表示非空equals

equals 表示比较内存

但是一般情况下,比较对象,都是重写equals方法,完成自定义的比较功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/319820.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考研数学|《1800》《660》《880》该怎么选?如何有效搭配?

这个简直太好选了! 我本人数二130,对于如何选考研资料,那心得太多了!看我这一篇就够了! 这是对于市面上基本比较出色的习题的一个总结。 我在考研的时候,这几本题集我都做过,其中深度使用的是…

产品AB测试设计

因为vue2项目升级到vue3经历分享1,vue2项目升级到vue3经历分享2,前端系统升级,界面操作也发生改变,为了将影响降到最低,是不能轻易让所有用户使用新系统的。原系统使用好好的,如果新界面用户不喜欢&#xf…

从一到无穷大 #26 Velox:Meta用cpp实现的大一统模块化执行引擎

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言业务案例PrestoSparkXStreamDistributed messaging systemData IngestionData Pr…

构建本地大语言模型知识库问答系统

MaxKB 2024 年 4 月 12 日,1Panel 开源项目组正式对外介绍了其官方出品的开源子项目 ——MaxKB(github.com/1Panel-dev/MaxKB)。MaxKB 是一款基于 LLM(Large Language Model)大语言模型的知识库问答系统。MaxKB 的产品…

Codeforces Round 942 (Div. 2) A~D1

A. Contest Proposal Problem - A - Codeforces 题目大意&#xff1a; 给定数组ai和bi&#xff0c;这俩数组都是非递减的。每次操作可以在ai的前面放上任意数字w&#xff0c;并删去a数组末尾的元素&#xff0c;求最少多少次操作让ai<bi。 思路&#xff1a; 模拟几个样例之后…

Nginx(搭建高可用集群)

文章目录 1.基本介绍1.在微服务架构中的位置2.配置前提3.主从模式架构图 2.启动主Nginx和两个Tomcat1.启动linux的tomcat2.启动win的tomcat3.启动主Nginx&#xff0c;进入安装目录 ./sbin/nginx -c nginx.conf4.windows访问 http://look.sunxiansheng.cn:7777/search/cal.jsp 3…

第七篇:深入解析操作系统基础原理:探索进程、存储、设备和文件管理

深入解析操作系统基础原理&#xff1a;探索进程、存储、设备和文件管理 1 引言 在现代计算系统中&#xff0c;操作系统扮演着至关重要的角色&#xff0c;它是软件与硬件之间的协调者&#xff0c;负责有效地管理系统资源&#xff0c;提供必要的服务支持&#xff0c;以确保应用程…

库存管理系统开源啦

软件介绍 ModernWMS是一个针对小型物流仓储供应链流程的开源库存管理系统。该系统的开发初衷是为了满足中小型企业在有限IT预算下对仓储管理的需求。通过总结多年ERP系统研发经验&#xff0c;项目团队开发了这套适用于中小型企业的系统&#xff0c;以帮助那些有特定需求的用户。…

设计模式: 模板模式

目录 一&#xff0c;模板模式 二&#xff0c;特点 三&#xff0c;组成部分 四&#xff0c;实现步骤 五&#xff0c;案例 一&#xff0c;模板模式 模板模式&#xff08;Template Pattern&#xff09;是一种行为型设计模式&#xff0c;它在超类中定义了一个算法的骨架&#…

13_Scala面向对象编程_伴生对象

文章目录 1.伴生对象1.1 scala的一个性质&#xff0c;scala文件中的类都是公共的&#xff1b;1.2 scala使用object关键字也可以声明对象&#xff1b; 3.关于伴生对象和类4.权限修饰符&#xff0c;scala仅有private;5.伴生对象可以访问伴生类中的私有属性&#xff1b;6.案例7.伴…

K8S 哲学 - 服务发现 services

apiVersion: v1 kind: Service metadata:name: deploy-servicelabels:app: deploy-service spec: ports: - port: 80targetPort: 80name: deploy-service-podselector: app: deploy-podtype: NodePort service 的 endPoint &#xff08;ep&#xff09; 主机端口分配方式 两…

MyBatisPlus自定义SQL

目录 一、自定义SQL介绍 二、自定义SQL的原因 1.案例 &#xff08;1&#xff09;不使用自定义SQL &#xff08;2&#xff09;使用自定义SQL 三、总结 一、自定义SQL介绍 我们可以利用MyBatisPlus的Wrapper来构建复杂的where条件&#xff0c;然后自己定义SQL语句中的剩下的…

Bert基础(二十)--Bert实战:机器阅读理解任务

一、机器阅读理解任务 1.1 概念理解 机器阅读理解&#xff08;Machine Reading Comprehension, MRC&#xff09;就是给定一篇文章&#xff0c;以及基于文章的一个问题&#xff0c;让机器在阅读文章后对问题进行作答。 在机器阅读理解领域&#xff0c;模型的核心能力体现在对…

企业计算机服务器中了halo勒索病毒怎么处理,halo勒索病毒解密流程

随着网络技术的不断发展&#xff0c;网络在企业生产运营过程中发挥着重大作用&#xff0c;很多企业利用网络开展各项工作业务&#xff0c;网络也大大提高了企业的生产效率&#xff0c;但随之而来的网络数据安全问题成为众多企业关心的主要话题。近日&#xff0c;云天数据恢复中…

OpenAI发布GPT-4.0使用指南

大家好&#xff0c;ChatGPT 自诞生以来&#xff0c;凭借划时代的创新&#xff0c;被无数人一举送上生成式 AI 的神坛。在使用时&#xff0c;总是期望它能准确理解我们的意图&#xff0c;却时常发现其回答或创作并非百分之百贴合期待。这种落差可能源于我们对于模型性能的过高期…

【R语言数据分析】函数

目录 自定义函数 apply函数 分类汇总函数aggregate 自定义函数 R语言中的自定义函数更像是在自定义一种运算规则。 自定义函数的语法是 函数名 函数体 } 比如 表示定义了一个名为BMI_function的函数&#xff0c;这个函数代表了一种运算规则&#xff0c;就是把传入的x和…

如何处理微服务之间的通信和数据一致性?

✨✨祝屏幕前的兄弟姐妹们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、微服务通信 1、同步通信&#xff1a;HTTP 1.1.同步通信示例代码&#xf…

记录几种排序算法

十种常见排序算法可以分类两大类别&#xff1a;比较类排序和非比较类排序。 常见的快速排序、归并排序、堆排序以及冒泡排序等都属于比较类排序算法。比较类排序是通过比较来决定元素间的相对次序&#xff0c;其时间复杂度不能突破 O(nlogn)。在冒泡排序之类的排序中&…

项目经理【人】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 一、共创模式 1.1 共创模式 二、干系人的影响力强度和态度 2.1 干系人影响力 2.2 干系人态度 2.3 干系人管理 三、干系人权力…

夏目友人帐所有妖怪名单

夏目友人帐妖怪名单 夏目友人帐 第一季 2008.07.07第1话&#xff1a;猫和友人帐 / 猫と友人帐 菱垣 狞影 斑第2话&#xff1a;露神之祠 / 露神の祠 露神 濯第3话&#xff1a;八原的怪人 / 八ツ原の怪人 一只目 牛头&#xff08;中级妖怪&#xff09;第4话&#xff1a;时雨与少女…