特质重复继承关系

父类特质 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. containerd 源码分析:创建 container(三)

    文接 containerd 源码分析:创建 container(二) 1.2.2.2 启动 task 上节介绍了创建 task,task 创建之后将返回 response 给 ctr.接着,ctr 调 ...

  2. Java线程概念集合

    线程 概念 1.程序:为解决某种问题,使用计算机语言编写的一系列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比 ...

  3. 获取URL中查询参数 URL中动态参数

    通过 req.query 对象,可以访问到客户端通过查询字符串的形式发送到服务器的参数 app.get('/',(req,res)=>{ console.log(req.query) }) .U ...

  4. .NET5 IIS ASP.NET CORE 部署时 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

    .NET5 IIS ASP.NET CORE 部署时 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure 部署机器只安装了dotnet-hos ...

  5. 10位,13位时间戳转为C#.NET格式时间 DateTime

    10位,13位时间戳转为C#.NET格式时间 DateTime - public static DateTime ToDateTime( string timestamp) { var tz = Ti ...

  6. Android开发基础——真机测试错误,ADB启动不了,程序安装不了,the connection to adb is down,INSTALL_CANCELED_BY_USER...

    在Android开发中,无论是真机测试还是AVD测试,都会报出这些错误.在这里,我会详细说明一下怎么会出现这些错误的,然后要怎么样才能解决这些错误. 错误一: The connection to ad ...

  7. Apollo config配置中心 配置列表和map DEMO

    Apollo config配置中心 配置列表和map DEMO#支持可扩展 Apollo配置 apollo中配置如下: defaultId = 100,200 chooseId = {"30 ...

  8. lovelive - μ's

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` lovelive - μ's 日期:2017-12-16 ...

  9. 支持TraceID、错误文件、错误行的第三方golang库:gerror

    Gerr库简介 Golang第三方库 官方仓库:https://github.com/GuoFlight/gerror 特点: 兼容golang原生error库 gerror会自动生成traceID, ...

  10. TCP,UDP,IP,数据链路层头部详解

    UDP头部 可以看到UDP头部由(源端口).(目的端口).(长度)跟(校验和)组成,总共8字节. 源端口:发送方的端口号,16位,即2字节. 目的端口:接收方的端口号,16位,即2字节. 长度:头部+ ...