Scala语法详解:特质 (Traits)

简介: Scala语法详解:特质 (Traits)

特质 (Traits) 用于在类 (Class)之间共享接口 (Interface)和字段 (Fields)。类似Java8的接口。 类和对象 (Objects)可以继承Trait,但Trait不能被实例化,因此特质没有参数。


定义

最简化的就是关键字trait+标识符:

trait HairColor

特征作为泛型类型和抽象方法非常有用。

trait Iterator[A] {
  def hasNext: Boolean
  def next(): A
}

扩展 trait Iterator [A] 需要一个类型 A 和实现方法hasNext和next。

使用


使用 extends 扩展Trait。然后使用 override 关键字实现trait里面的任何抽象成员:

trait Iterator[A] {
  def hasNext: Boolean
  def next(): A
}
class IntIterator(to: Int) extends Iterator[Int] {
  private var current = 0
  override def hasNext: Boolean = current < to
  override def next(): Int =  {
    if (hasNext) {
      val t = current
      current += 1
      t
    } else 0
  }
}
val iterator = new IntIterator(10)
iterator.next()  // returns 0
iterator.next()  // returns 1

这个类 IntIterator 将参数 to 作为上限。它扩展了 Iterator [Int],这意味着方法 next 必须返回一个Int。

子类型


凡是需要特质的地方,都可以由该特质的子类型来替换。

import scala.collection.mutable.ArrayBuffer
trait Pet {
  // 抽象字段
  val name: String
}
// name 由Cat和Dog的构造器实现
class Cat(val name: String) extends Pet
class Dog(val name: String) extends Pet
val dog = new Dog("Harry")
val cat = new Cat("Sally")
val animals = ArrayBuffer.empty[Pet]
animals.append(dog)
animals.append(cat)
// 调用pet.name的前提是它必须在特质Pet的子类型中得到了实现。
animals.foreach(pet => println(pet.name))
目录
相关文章
|
6月前
|
分布式计算 Java Scala
Scala:面向对象、Object、抽象类、内部类、特质Trait(二)
Scala:面向对象、Object、抽象类、内部类、特质Trait(二)
92 0
|
6月前
|
大数据 Scala
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
54 0
|
Java Scala C++
Scala选择和循环语法
Scala选择和循环语法
54 0
|
Java Scala
scala面向对象编程之trait特质
特质就像是java的implement,是scala中代码复用的基础单元,它可以将方法和字段定义封装起来,然后添加到类中与类继承不一样的是,类继承要求每个类都只能继承一个超类,而一个类可以添加任意数量的特质。特质的定义和抽象类的定义很像,但它是使用trait关键字
117 0
scala面向对象编程之trait特质
|
Java Scala
Scala快速入门-8-特质
Scala和Java一样不允许类继承多个超类,特质解决这一局限性 类可以实现任意数量的特质 当将多个特质叠加在一起时,顺序很重要,其方法先被执行的特质排在更后面 Scala特质可以提供方法和字段的实现 特质要求实现它们的类具备特定的字段、方法或超类 特质可以同时拥有抽象方法和具体方法,而类可以实现多个特质
|
分布式计算 Java Scala
一天学完spark的Scala基础语法教程十二、异常处理(idea版本)
一天学完spark的Scala基础语法教程十二、异常处理(idea版本)
200 0
一天学完spark的Scala基础语法教程十二、异常处理(idea版本)
|
Java Scala
【Scala】Scala之Traits
前面学习了Scala中包和导入的相关知识点,接着学习Traits(特质)
150 0
|
NoSQL Java Scala
Swift和Scala语法上的诸多相似之处
国外开发者最近发现,WWDC2014上苹果发布的新语言Swift,和古老的Scala语言在语法上存在众多的相似之处。
243 0
Swift和Scala语法上的诸多相似之处
|
Java 程序员 Scala
Java 程序员必备scala基础语法
Java 程序员必备scala基础语法
80 0
|
大数据 Scala Java
大数据Scala系列之特质
  大数据Scala系列之特质,特质的定义除了使用关键字trait之外,与类定义无异。   特质用来在类之间进行接口或者属性的共享。类和对象都可以继承特质,特质不能被实例化,因此也没有参数。   一旦特质被定义了,就可以使用extends或者with在类中混入特质。
812 0