动态混入特质对字段的处理|学习笔记

简介: 快速学习动态混入特质对字段的处理。

开发者学堂课程【Scala 核心编程-基础动态混入特质对字段的处理】学习笔记,与课程紧密联系,让用户快速学习知识。

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


动态混入特质对字段的处理

 

内容介绍

、特质中的具体字段

举例

特质中的抽象字段

整理

 

一、特质中的具体字段

特质中可以定义具体字段,如果初始化了就是具体字段,如果不初始化就是抽象字段。混入该特质的类就具有了该字段,该特质,字段不是继承,而是直接加入类,成为自己的字段。

 

二、举例

[案例演示+反编译]

特质有一个具体的字段比如 DB6DB6里面有一个具体的字段赋值了当有一个 MySQL6混入了 DB6它在底层实际上是给匿名子类直接加入一个字段而不是继承下来的

trait DB6 extends Operate6 {

var opertype : String = "insert"

def insert(): Unit ={

}

}

class MySQL6 {}

var mysql = new MvSQL6 with DB6

//通过反编译,可以看到 opertype

println(mysql.opertype)

创建命名为 mixinpro选择 object

写一个案例

package com. atguigu. chapter08. mixin

object MixInPro{

Val mySQL =new MySQL6 with DB6  混入DB6

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

trait DB6  { 暂时不继承

var opertype : String = "insert"

def insert(): Unit ={

}

}

class MySQL6 {}

执行看效果没有问题当混入产生一个对象时opertype 是什么机制打开反编译工具找到 MixInPro$.class进行打开

可以看到当混入一个特质时private String opertype 直接放进去了相当于去创建一个混入对象它把从父特质的属性直接加入到 MySQL6并没有进行继承

 

三、特质中的抽象字段

1、特质中未被初始化的字段在具体的子类中必须被重写。

2、举例

假如这里有一个抽象的字段给它一个类型立刻报错因为抽象的字段没有给值再进行混入没有实现就会报错

package com atguigu. chapter08 mixin

object MixInPro {

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

val mySQL = new MySQL6 with DB6

Override var sal= ‘’‘’底层会显示相应的方法给它一个具体值这个代码是必须给的因为它底层相当于把对应的方法进行生成就是抽象方法要实现抽象字段也要实现

}

}

trait DB6{

Var salint

var opertype : string = insert"

def insert(): Unit = {

}

}

class MySQL6{}

把这个拿到进行实现点击 OK

 

四、整理

1、特质中的具体字段

特质中可以定义具体字段,如果初始化了就是具体字段,如果不初始化就是抽象字段。混入该特质的类就具有了该字段,字段不是继承,而是直接加入类,成为自己的字段。[案例演示+反编译]

package com atguigu. chapter08 mixin

object MixInPro {

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

val mySQL = new MySQL6 with DB6

}

}

trait DB6{

var opertype : string = insert"

def insert(): Unit = {

}

}

class MySQL6{}

2、反编译后代码

public void main (String[] args)

{

MySQL6 mySQL . new MvSQL6() { private String opertype;父特质的普通字段,被直接加入到混入对象

pub1ic String opertype(){ return this · opertype; }

@TraitSetter

public void opertype_ $eq (String x$1) [ this. opertype = x$1; }

public void insert() { DB6.clasa. insert(this); } } ;

}

private MixInPro$ () {

MODULE$ = this ;

}

}

3、特质中的抽象字段

特质中未被初始化的字段在具体的子类中必须被重写。

package com atguigu. chapter08 mixin

object MixInPro {

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

val mySQL = new MySQL6 with DB6

Override var sal= ‘’‘’

}

}

trait DB6{

Var salint

var opertype : string = insert"

def insert(): Unit = {

}

}

class MySQL6{}

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
开发框架 前端开发 JavaScript
跨平台开发:构建一次运行到处工作的应用程序的未来
在当今多样化的设备和操作系统中,跨平台开发已经成为现代应用程序开发的关键。它允许开发人员使用一套代码构建应用程序,然后在多个平台上运行,从而节省时间和资源。本博客将深入研究跨平台开发的核心概念、技术工具以及为什么它们在应用开发中如此重要。
525 0
|
存储 Ruby 内存技术
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
516 1
|
10月前
|
人工智能 自然语言处理 运维
当我的同事先用了通义灵码DeepSeek-R1模型……
近日,通义灵码上线DeepSeek-R1模型选择功能,为开发者们提供更懂中文,更擅复杂场景的AI编码助手,安装只需30秒,在IDEA插件市场搜索“通义”,认准排名第一的插件——最新2.1.0版本已支持多个模型,具备实时续写、自然语言生成、智能问答等多项能力。我们选择阿里云账号进行登录,个人版/企业版都能用。
|
10月前
|
XML JSON 算法
智能冰箱食材识别
本案例设计了一个囤菜系统原型,主要方法是利用冰箱内安装的摄像头,通过目标检测算法识别食材类别,判断存取动作,增加或者减少相应的食材的数量,并记录存取时间等相关数据,设计出了具备提示清理和补货等功能的智能化囤菜系统原型。
633 7
|
11月前
|
人工智能 自然语言处理 搜索推荐
年度评选 | 2024年客服系统6大品牌
在2024年的客服系统市场中,合力亿捷等服务商品牌展现了各自在技术研发、产品创新和行业应用等方面的卓越实力。
450 1
|
设计模式 Java 关系型数据库
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
|
资源调度 JavaScript 前端开发
【TypeScript】Ts基本概念
【TypeScript】Ts基本概念
324 0
|
人工智能 Cloud Native 安全
众安保险接入阿里云通义大模型
众安保险接入阿里云通义大模型
427 2
|
消息中间件
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
530 0
|
搜索推荐 API 数据库
开源电子邮件营销平台 listmonk 使用教程
电子邮件营销是海外产品推广的关键,而ESP(电子邮件服务提供商)如Mailchimp和SendCloud等常被用于管理邮件列表和跟踪效果。然而,成本和定制化限制成为问题。为解决这些问题,开源平台如listmonk提供了一种灵活且可定制的解决方案。listmonk用Go语言编写,具备订阅者管理、邮件创建发送、跟踪分析和API集成等功能,特别适合中小企业和大型组织。它还支持一键部署,例如通过Sealos应用商店,使得部署过程变得简单。
685 1