【Scala】05 对象特性Part2
特质重复继承关系
父类特质 A
子类特质B 继承 A
子类特质C 继承A
类D 继承了 B 又实现了 C
class D extends B with C
继承顺序是 D 继承 C 继承 B 继承 A
特质和抽象类的区别?
1、可扩展性不同
只能扩展一个抽象类,但是扩展特质是支持多个特质
对于一些功能性对象需要高可扩展性的场景使用特质
2、初始化生命周期时的处理场景
特质只有无参构造,不支持参数化构造创建,抽象类可以实现这个场景需求
特质更多的是像一个类,一个普通类A实现特质B的时候,一个的时候是直接extends就可以完成
class A extends B with C {
override def abMethod(): Unit = { } override def abMethod2(): Unit = { }
}
trait B {
def abMethod() : Unit
} trait C {
def abMethod2() : Unit
}
文档:
https://docs.scala-lang.org/zh-cn/tour/traits.html
特质自身类型
实现类型和子类统一,
子类可以通过相同的自身类型调用特质方法
package cn object HelloScala {
def main(args: Array[String]): Unit = {
val user = new Register("zhangSan", "123456")
user.insertRecord()
}
} class Account(val username : String, val password : String) trait AccountDao {
_ : Account => // 定义自身类型为 Account def insertRecord() : Unit = {
println(s"insert into db : ${this.username}, ${this.password}")
}
} class Register(username : String, password : String) extends Account(username, password) with AccountDao
类型判断和转换
package cn object HelloScala {
def main(args: Array[String]): Unit = {
val b : A = new B println(b.isInstanceOf[B]) // true
println(b.isInstanceOf[A]) // true 父类可以,子类也可以 val a = b.asInstanceOf[A]
println(a.isInstanceOf[B]) // true
println(a.isInstanceOf[A]) // true }
} class A { } class B extends A { }
枚举类和应用类
package cn object HelloScala {
def main(args: Array[String]): Unit = { println(Test.SPRING)
}
} /**
* 枚举类
*/
object Test extends Enumeration {
val SPRING = Value(1, "spring")
val SUMMER = Value(1, "summer")
val AUTUMN = Value(1, "autumn")
val WINTER = Value(1, "winter")
} // 应用类, 这个类可以直接跑起来运行,相比Java和SpringBoot框架要更为简介
object TestApp extends App {
println("App start?") type CustomType = String
val a : CustomType = "adsadas"
println(a)
}
【Scala】05 对象特性Part2的更多相关文章
- 【HTML5 WebSocket】WebSocket对象特性和方法
<HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接 ...
- Java精通并发-自旋对于synchronized关键字的底层意义与价值分析以及互斥锁属性详解与Monitor对象特性解说【纯理论】
自旋对于synchronized关键字的底层意义与价值分析: 对于synchronized关键字的底层意义和价值分析,下面用纯理论的方式来对它进行阐述,自旋这个概念就会应运而生,还是很重要的,下面阐述 ...
- Scala的高级特性
高阶函数 概念 Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数.在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等 ...
- 6、scala面向对象-对象
一.对象 1.object object,相当于class的单个实例,通常在里面放一些静态的field或者method,第一次调用object的方法时,就会执行object的constructor, ...
- scala伴生对象
package com.test.scala.test /** * 伴生对象指的是在类中建立一个object */ class AssociatedObject { private var count ...
- Scala Singleton对象
Scala Object: scala没有静态的修饰符,例如Java中的static.但是Scala提供了Object类型,object下的成员都是静态的,比较像Java的静态类.不同在于Scala的 ...
- Scala函数式对象-有理数
有理数类的表示 实现规范:支持有理数的加减乘除,并支持有理数的规范表示 1.定义Rational 首先,考虑用户如何使用这个类,我们已经决定使用“Immutable”方式来使用Rational对象,我 ...
- Scala可变对象
Java提供JavaBean作为数据对象的封装, 而对于Scala来说也提供了同样的支持. class Apple { var weight: Float = _ var color: String ...
- Php对象及对象特性篇
前言 以前写C++最多,大二课上学过Java.现在也差不多还给老师了.现在决定针对php重新梳理一遍,夯实基础,设计模式学起来应该会更加得心应手吧. 介绍 对象作为数据和功能代码的集合,是程序开发和代 ...
- scala 判断对象相等/equals
package scala_enhance.scalaextends import scala.collection.mutable.HashMap /** * scala中判断对象相等 * 原则: ...
随机推荐
- TestMarkdown1
VSCode 实时预览还需要执行 Markdown: Open Preview to the Side 命令来实现. 在命令窗口输入 Markdown: Open Preview to the Sid ...
- bpmnjs
在 bpmn.js 中,`bpmnModeler.get()` 方法用于获取不同的模块,你可以通过这些模块来访问和操作 BPMN 模型的不同部分.以下是一些常用的模块和对应的用途: 1. **Canv ...
- react多级路由 重定向与404定义
在有一些功能中,往往请求地址的前缀是相同的,不同的只是后面一部份,此时就可以使用多级路由(路由嵌套)来实现此路由的定义实现. 例: 路由规则如下 admin/index admin/user 它们路由 ...
- DBEAVER 23.0.2 调整SQL编辑器字体大小 ver:20240112
DBEAVER 23.0.2 调整SQL编辑器字体大小 ver:20240112 版本是:23.0.2. 菜单-窗口-首选项.用户界面-外观-颜色和字体.展开 DBeaver Font."M ...
- 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)
1. 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制) @ 目录 1. 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadL ...
- 根据两个日期之间获取LocalDate日历列表和LocalDate和LocalDateTime数据格式转换
根据两个日期之间获取LocalDate日历列表和LocalDate和LocalDateTime数据格式转换 package com.example.core.mydemo.localdatetime; ...
- 技嘉BIOS超频设置操作路径
关闭超线程 频率电压控制 > 进阶处理器设置 > Hyper_THreading 关小核心 频率电压控制 > GIGABYTE PerfDrive > Ecore Disabl ...
- python selenium UI自动化操作iframe及返回默认页面
页面操作的场景:进到到页面A,选择页面A里面的记录,点击签约, 弹出一个弹窗B,弹窗B的内容是协议及同意按钮或其他非同意的提示信息,主要的操作,打开页面A,点击签约,点击同意,操作完成 分析页面的组成 ...
- yum update和yum upgrade的区别
看见网上很多关于这个问题的解答,但是大部分都是错的,误人子弟! 很多都是执行这两个命令,然后查看系统的变化.看似严谨,实则愚蠢至极. 就算不懂内核,也应该懂得什么是内核呀!也应该懂得内核是怎么进入的啊 ...
- python提取特定格式的数据
Excel Grid Data Converter 知识点总结 本文档总结了 ExcelGridConverter.py 脚本所涉及的关键 Python 知识点.该脚本用于从多个 Excel 文件中提 ...