scala--特质

2024-04-09 23:08
文章标签 scala 特质

本文主要是介绍scala--特质,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特质

    • 一、特质(trait)
    • 二、混入特质(mixin)
    • 三、特质与抽象类的选择

一、特质(trait)

  • Scala中没有接口(interface)的概念

  • 特质用于在类之间共享程序接口和字段,类似Java接口

  • 特质是字段和方法的集合,可以提供字段和方法实现

  • 类和单例对象都可以扩展特质(extends)

  • 特质不能被实例化,因此没有构造参数,类似Java接口

  • 特质使用“trait”关键字定义

  • 实现特质中的方法使用“override”

二、混入特质(mixin)

  • 当某个特质被用于组合类时,被称为混入

  • 一个类只能有一个父类但是可以有多个混入(分别使用关键字extends和with)

trait Type1{def wheele:String= "四轮驱动"def run():Unit
}trait Type2{def fly()= println("可以飞")def down()= println("下海")
}//定义抽象类
abstract class Car {def brand:Stringdef engine:Stringdef didi():String ={"汽车鸣笛"}
}//实现类 混入特质
class BMW extends Car with Type1 {override def brand: String = {"德系宝马"}override def engine: String = {"6.0自然吸气,燃油动力"}override def run(): Unit = {println("在路上跑")}
}class LingYun extends Car {override def brand: String = "凌云汽车"override def engine: String = "纯电动汽车"
}object test{def main(args: Array[String]): Unit = {val bmw=new BMWprintln(bmw.brand)println(bmw.engine)println(bmw.didi())println(bmw.wheele)bmw.run()//动态混入特质val lingYun:LingYun=new LingYun with Type1 with Type2{override def run(): Unit = {println("两轮电动汽车")}}println(lingYun.brand)println(lingYun.engine)lingYun.run()lingYun.fly()lingYun.down()}
}

三、特质与抽象类的选择

  • 优先使用特质
    1.抽象类只能继承一次
    2.特质可混入多个

  • 需要使用带参构造方法时,使用抽象类

  • 与Java互操作性
    1.抽象类与Java完全可互操作
    2.特质只有在不包含任何实现代码时才可互操作

这篇关于scala--特质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/889468

相关文章

【scala 安装错误】错误: 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner

错误: 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner 原因: Scala安装路径中包含空格。 解决办法:scala 不要安装在E:\Program Files 这种有空格的目录下,简直坑

Scala模式匹配下提取器构造

示例代码: object :> {def unapply[A] (list:List[A]) = {Some( (list.init,list.last) )}}object Extractor_Advanced {def main(args: Array[String]): Unit = {(1 to 9).toList match{ case _ :> 9 => println(

从spark源码的角度思考scala中的模式匹配

1.scala中模式匹配 2.spark源码中的模式匹配思考 spark中master会收到worker发过来的akka的消息, 此消息是case class即(Master.class中): case class RegisterWorker(id:String,host:String,port:Int,cores:Int,memory:Int,webUiPort:int

Scala界面事件处理

示例代码: import scala.swing.SimpleSwingApplicationimport scala.swing.MainFrameimport scala.swing.Buttonimport scala.swing.Labelimport scala.swing.Orientationimport scala.swing.BoxPanelimpo

Scala界面Panel、Layout初探

示例代码: package com.dt.scala.guiimport scala.swing.SimpleSwingApplicationimport scala.swing.MainFrameimport scala.swing.Buttonimport scala.swing.Labelimport scala.swing.Orientationimport scal

scala界面GUI编程实战初步了解

示例代码: import scala.swing._//SimpleSwingApplication继承自SwingApplication类(此类中有main方法,因此可以运行显示界面)object Hello_GUI extends SimpleSwingApplication {def top = new MainFrame{ //顶级容器title = "Hello GUI"co

Scala并发编程react、loop代码实战详解

示例代码及注释: //scala并发编程中的react和loop,共同特点://通过线程存用的方式让性能有所提升。//Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的线程让当前的actor使用//一般情况下每个Actor都有自己的线程。只有有自己的线程时,我们的Actor中的actor方法才会执行。//但是,这样线程的开销会非常大,所以为了共用线

scala并发编程原生线程Actor、Case Class下的消息传递和偏函数实战

参考代码: import scala.actors._case class Person(name:String,age:Int)class HelloActor extends Actor{def act(){while(true){receive{case Person(name,age)=>{ //偏函数println("Name: "+ name + ":" +"Age:"

优秀程序员五大特质

很多人都觉得编程是一个比较特殊的职业,整天的加班,想不起来陪媳妇或陪老公。还整天自嘲为码农,屌丝等等。这是传统意义上的一个程序员的真实写照,但优秀的程序员都具备什么特质那? 优秀程序员五大特质 对编程特别喜欢,听到说编程的坏话就会急眼 真正的编程的高手,从骨子里是非常认可编程这份职业。而且中间不会有转行业这个想法,而且会作为一辈子的事业忠诚的对待。别看他们

scala基础概念

Scala是面向行的语言,Scala 语句末尾的分号写或者不写都可以。 对象 - 对象有属性和行为。例如:一只哈士奇的属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。 类 - 类是对象的抽象;对象是类的具体实例。 方法 - 方法描述的基本的行为,一个类可以包含多个方法。 字段 - 每个对象都有它唯一的实例变量集合,即字段。对象的属性通过给字段赋值来创建。 基本语法