`
bit1129
  • 浏览: 1067622 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Scala十二】Scala核心六:Trait

 
阅读更多

Traits are a fundamental unit of code reuse in Scala. A trait encapsulates method and field definitions, which can then be reused by mixing them into classes. Unlike class inheritance, in which each class must inherit from just one superclass, a class can mix in any number of traits. Once a trait is defined, it can be mixed in to a class using either the extends or with keywords.

 

trait类似Java中可以带有实现的接口,Java中有多接口继承,scala中有多trait集成

 

trait相对于普通的类,不管是具体类,还是抽象类,一个重要的差别是trait的主构造函数不能带有参数,

例如

trait ThisIsTrait(arg: String)

 

定义了多个trait的Animal类:

 

package spark.examples.scala.twaits

trait Animal {
  def weight = 0

  //抽象方法
  def speak
}

trait HasLegs {
  def numLegs = 0
}

trait CanClimbTree {
  def canClimeTree = false
}

trait GenericsTrait[T] {
  def get: T
}

trait Getter1 {
  def duplicateGet = 101

  def duplicateGet2 = 1012
}

trait Getter2 {
  def duplicateGet = 102
  def duplicateGet2 = 2012
}

trait Getter3 {
  def getIt = 100
}

//trait跟class的一个重要区别是,trait主构造函数不能有参数,如下错误
/*
trait
 */

 

 mixin trait的具体类:Cat

 

package spark.examples.scala.twaits

//The first one uses Animal; the others use with,one with for each
class Cat(name: String) extends Animal with HasLegs with CanClimbTree with GenericsTrait[Int] with Getter1 with Getter2 with Getter3 {

  override def weight: Int = 3

  override def numLegs: Int = 4

  override def canClimeTree: Boolean = true

  //抽象方法
  override def speak: Unit = {
    println("Miao")
  }

  override def toString: String = {
    "I am a cat: " + name
  }

  override def duplicateGet = 300

  override def get = {
    super.duplicateGet + 100 //为什么super指向的是Getter2而不是Getter1
  }

  override def duplicateGet2 = {
    super.duplicateGet2 + 10001 //为什么super指向的是Getter2而不是Getter1
  }

  override def getIt: Int = {
    super.getIt + 120
  }

}

 

调用程序

 

package spark.examples.scala.twaits


object TwaitTest {
  def main(args: Array[String]) {
    val c = new Cat("kitty")
    c.speak
    println(c.numLegs)
    println(c.canClimeTree)
    println(c.get)
    //两个trait定义了相同的方法并且提供了实现,那么Scala会报方法冲突,解决办法,实体类进行重写
    println(c.duplicateGet)
    //通过super调用父实现
    println(c.getIt)
    println(c.duplicateGet2)
  }
}

 

 问题:在使用super.methodName时,如果多个trait都有那个方法时,为什么一直都是最后一个起作用,如果要让第一个起作用,该如何操作?

 

分享到:
评论

相关推荐

    尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

    《Scala语言核心编程》是尚硅谷教育机构韩顺平老师主讲的一门课程,主要针对Scala这门多范式编程语言进行深入讲解。Scala是一种静态类型的编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、...

    Scala编程详解 第15讲-Scala编程详解:面向对象编程之Trait 共14页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala程序设计第二版

    2. **面向对象编程**:Scala是面向对象的语言,书中会详细讲解类、对象、继承、封装和多态性等概念,以及Scala如何通过特质(trait)来实现多重继承和行为组合。 3. **函数式编程**:Scala对函数式编程的支持是其一...

    scala sdk scala-2.12.3

    Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...

    Scala编程详解 第3讲-Scala编程详解:基础语法 共8页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第18讲-Scala编程详解:模式匹配 共11页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第5讲-Scala编程详解:函数入门 共5页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第16讲-Scala编程详解:函数式编程 共14页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第11讲-Scala编程详解:Map与Tuple 共8页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第10讲-Scala编程详解:数组操作之数组转换 共5页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第20讲-Scala编程详解:隐式转换与隐式参数 共9页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第17讲-Scala编程详解:函数式编程之集合操作 共9页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第7讲-Scala编程详解:函数入门之变长参数 共4页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala考试题1

    Scala 是一种多范式的编程语言,它融合了面向对象和函数式编程的特性。下面将详细解释题目中涉及的Scala知识点: 1. **var、val 和 def 的区别**: - `var` 定义可变变量,可以多次赋值。 - `val` 定义不可变变量...

    scala-2.12.1 sdk

    Scala SDK的核心组成部分包括: 1. **Scala编译器**:将Scala源代码编译成Java字节码,使其能在Java虚拟机(JVM)上运行。 2. **Scala库**:提供了大量的类和方法,涵盖了从基本数据类型到高级并发处理的各种功能。 ...

    scala2.12.1Windows镜像包

    - **面向对象**:支持类、接口、继承和多态,同时引入了特质(trait),提供了一种灵活的实现多重继承的方式。 - **函数式编程**:函数是一等公民,可以作为参数传递,也可以作为返回值。并支持高阶函数、柯里化、...

    Scala(Scala)所谓的:您如何称呼它?...对于Scala(Scala)

    首先,让我们来看看Scala的核心特性: 1. **类型系统**:Scala拥有强大的静态类型系统,可以避免运行时错误。类型推断使得开发者无需在每条语句前指定类型,编译器会自动推断。此外,Scala还支持类型类和隐式转换,...

    Scala最新官方下载包(官方的下载真的慢)

    Scala语言的核心特性包括: 1. **类型系统**:Scala拥有一个静态类型系统,它能自动推断类型,使得代码更加简洁。类型安全是其一大优点,可以避免运行时错误。 2. **面向对象编程**:Scala支持类、对象和继承,...

    scala3-example-project:使用Dotty编译的示例sbt项目

    Dotty是Scala语言的一个实验分支,旨在成为Scala 3的核心,它引入了许多改进和新特性,以提高语言的清晰度、一致性和可维护性。 描述部分"scala3-example-project:使用Dotty编译的示例sbt项目"进一步确认了该项目...

Global site tag (gtag.js) - Google Analytics