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语言核心编程》是尚硅谷教育机构韩顺平老师主讲的一门课程,主要针对Scala这门多范式编程语言进行深入讲解。Scala是一种静态类型的编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
2. **面向对象编程**:Scala是面向对象的语言,书中会详细讲解类、对象、继承、封装和多态性等概念,以及Scala如何通过特质(trait)来实现多重继承和行为组合。 3. **函数式编程**:Scala对函数式编程的支持是其一...
Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
Scala 是一种多范式的编程语言,它融合了面向对象和函数式编程的特性。下面将详细解释题目中涉及的Scala知识点: 1. **var、val 和 def 的区别**: - `var` 定义可变变量,可以多次赋值。 - `val` 定义不可变变量...
Scala SDK的核心组成部分包括: 1. **Scala编译器**:将Scala源代码编译成Java字节码,使其能在Java虚拟机(JVM)上运行。 2. **Scala库**:提供了大量的类和方法,涵盖了从基本数据类型到高级并发处理的各种功能。 ...
- **面向对象**:支持类、接口、继承和多态,同时引入了特质(trait),提供了一种灵活的实现多重继承的方式。 - **函数式编程**:函数是一等公民,可以作为参数传递,也可以作为返回值。并支持高阶函数、柯里化、...
首先,让我们来看看Scala的核心特性: 1. **类型系统**:Scala拥有强大的静态类型系统,可以避免运行时错误。类型推断使得开发者无需在每条语句前指定类型,编译器会自动推断。此外,Scala还支持类型类和隐式转换,...
Scala语言的核心特性包括: 1. **类型系统**:Scala拥有一个静态类型系统,它能自动推断类型,使得代码更加简洁。类型安全是其一大优点,可以避免运行时错误。 2. **面向对象编程**:Scala支持类、对象和继承,...
Dotty是Scala语言的一个实验分支,旨在成为Scala 3的核心,它引入了许多改进和新特性,以提高语言的清晰度、一致性和可维护性。 描述部分"scala3-example-project:使用Dotty编译的示例sbt项目"进一步确认了该项目...