特质重复继承关系

父类特质 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的更多相关文章

  1. 【HTML5 WebSocket】WebSocket对象特性和方法

    <HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接 ...

  2. Java精通并发-自旋对于synchronized关键字的底层意义与价值分析以及互斥锁属性详解与Monitor对象特性解说【纯理论】

    自旋对于synchronized关键字的底层意义与价值分析: 对于synchronized关键字的底层意义和价值分析,下面用纯理论的方式来对它进行阐述,自旋这个概念就会应运而生,还是很重要的,下面阐述 ...

  3. Scala的高级特性

    高阶函数 概念 Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数.在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等 ...

  4. 6、scala面向对象-对象

    一.对象 1.object object,相当于class的单个实例,通常在里面放一些静态的field或者method,第一次调用object的方法时,就会执行object的constructor, ...

  5. scala伴生对象

    package com.test.scala.test /** * 伴生对象指的是在类中建立一个object */ class AssociatedObject { private var count ...

  6. Scala Singleton对象

    Scala Object: scala没有静态的修饰符,例如Java中的static.但是Scala提供了Object类型,object下的成员都是静态的,比较像Java的静态类.不同在于Scala的 ...

  7. Scala函数式对象-有理数

    有理数类的表示 实现规范:支持有理数的加减乘除,并支持有理数的规范表示 1.定义Rational 首先,考虑用户如何使用这个类,我们已经决定使用“Immutable”方式来使用Rational对象,我 ...

  8. Scala可变对象

    Java提供JavaBean作为数据对象的封装, 而对于Scala来说也提供了同样的支持. class Apple { var weight: Float = _ var color: String ...

  9. Php对象及对象特性篇

    前言 以前写C++最多,大二课上学过Java.现在也差不多还给老师了.现在决定针对php重新梳理一遍,夯实基础,设计模式学起来应该会更加得心应手吧. 介绍 对象作为数据和功能代码的集合,是程序开发和代 ...

  10. scala 判断对象相等/equals

    package scala_enhance.scalaextends import scala.collection.mutable.HashMap /** * scala中判断对象相等 * 原则: ...

随机推荐

  1. C# .NET 6 使用WorkFlow Core 创建工作审批流

    1,背景 工作流思想在上世纪60年代就有人提出过:70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现:80年代才出现第一批成功的工作流系统:90年代工作流技术走向了第一个发展高 ...

  2. kettle从入门到精通 第三十三课 再谈 kettle 表输出 分区/分片

    1.之前第九章有讲过kettle 表输出步骤,里面有简单的提到过表输出步骤里面的表分区设置,这里详细介绍下. 表分区数据:选择此选项可根据"分区"字段中指定的日期字段的值将数据拆分 ...

  3. 模拟登录之web监控

    1.什么是web监控 zabbix除了能通过 脚本+自定义key,实现服务器数据提取监控以外 也支持对网页的HTTP请求.响应监控. 2.web监控需求 以zabbix-UI页面的登录监控,模拟登录, ...

  4. CRP关键渲染路径笔记

    关键渲染路径CRP笔记 关键渲染路径(Critical Render Process)是浏览器将HTML.CSS和JavaScript代码转换为屏幕上像素的步骤序列,它包含了DOM(Document ...

  5. 微信和支付宝异步回调通知IP白名单

    附一:微信支付回调通知出口IP列表 商户侧对商户回调通知功能开通白名单网段: 上海电信出口网段:101.226.103.0/25 上海联通出口网段:140.207.54.0/25 上海CAP出口网段: ...

  6. mybatis sqlmap sql in 查询

    <select id="selectBlogs" parameterType="map"> SELECT * FROM blog WHERE use ...

  7. 麒麟操作系统V10安装mysql8.0.26

    今年mysql装得有点多,大概有4次了,快变系统工程师了! 本文重点说下如何识别版本和配置服务! 首先两点: 1)麒麟本质是linux内核,所以基本上centos的操作在这里可以通用 2)虽然通用,但 ...

  8. hive第一课:# hive-3.1.2分布式搭建文档

    hive-3.1.2分布式搭建文档 谷歌浏览器下载网址:Google Chrome – Download the fast, secure browser from Google 华为云镜像站:htt ...

  9. ARM 命名规则和ARM 版本

    结论:我们所接触到提到的命名规则,应该分成两类. 基于ARM Architecture版本的"指令集架构"命名规则:例如armv6, armv7, armv7s, arm64 等系 ...

  10. Java助力加固Excel文件,保障数据安全

    前言 Excel文件保护是常用的一种功能,文件保护主要有三种: 添加密码,如果没有密码不允许打开文件. 添加密码,如果没有密码,不能修改文件,但可以打开,只读以及另存文件. 只读推荐,通常推荐打开Ex ...