SCALA当的trait

不是特别懂,但感觉和RUBY当中的MIX-IN功能有几分相似,这又扯到了多重继承及JAVA当中的接口虚拟类了。。

package com.hengheng.scala

class UseTrait {

}
trait Logger {
  def log(msg : String) {
    println("log : " + msg)
  }
}
trait ConsoleLogger extends Logger {
  override def log(msg : String) {
    println(msg)
  }
}
class Test extends ConsoleLogger {
  def test() {
    log("Here is Spark!")
  }
}
class ConcreteLogger extends Logger {
  def concreteLog {
    log("It‘s me!")
  }
}
object UseTrait extends App {
  var logger = new ConcreteLogger
  logger.concreteLog
  var test = new Test
  test.test
}

  输出:

log : It‘s me!
Here is Spark!

时间: 2024-10-16 18:08:43

SCALA当的trait的相关文章

scala中的trait

这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适.它的意义和java,c#中接口很类似.但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法. 下面我们以一个具体的例子来介绍下trait的使用. 我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait Flyable和Swimable分别表示会飞和会游泳两种特征. 我们先看下Aminmal的实现: abstract class Animal { def walk(speed:

scala中trait学习笔记

scala中提供的trait(特质)和Java中的Interface有很多相似之处.都可以持有方法的声明和属性,但是trait还有比interface强大的多的其他用法. 1. trait可以带有方法实现: 2. trait与interface一样,可以互相继承.但是trait可以继承自某个类,但是这种特质只能够混入父类的子类中,不能随意混入: 3. trait中可以在运行时动态调用方法. 下面举一个trait使用的例子. 首先定义一个虚类IntQueue和特质Logger abstract c

scala学习笔记-面向对象编程之Trait(13)

将trait作为接口使用 1 // Scala中的Triat是一种特殊的概念 2 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 3 // 在triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可 4 // 类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有implement的概念,无论继承类还是trait,统一都是extends 5 // 类继承tra

scala学习手记34 - trait方法的延迟绑定

trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer { def write(message: String): String } trait UpperWriter extends Writer { abstract override def write(message: String): String = super.write(message.toUpperCase) }

Scala:trait

Scala开篇(目录) 在Scala中有一个trait类型,它可以被继承,而且支持多重继承,其实它更像我们熟悉的接口(interface),但它与接口又有不同之处是: trait中可以写方法的实现,interface不可以(java8开始支持接口中允许写方法实现代码了),这样看起来trait又很像抽象类(abstract),一会我们会通过反编译,看看Scala中对trait是怎样处理的,先来看看trait的使用. //声明一个 trait trait TraitBase{ def add(x:I

[Scala基础系列 08]Scala继承、抽象类、接口trait以及AOP实现

1.继承 和java一样,scala采用extends关键字继承基类.代码实例如下: /** * Created by molyeo on 2015/8/11. */ class Person(val name: String, var age: Int) { println("The primary constructor of Person") val school = "BJU" def sleep = "8 hours" override

Scala编程入门---面向对象编程之Trait高级知识

trait调用链 Scala中支持让类继承多个Trait后,依次调用多个Trait中的同一个方法,只要让多个trait的同一个方法中,在最后都执行super.方法即可 类中调用多个trait中都有这个方法时,首先会从最右边的trait的方法开始执行,然后依次往左执行,形成一个调用链条 这种特性非常强大,其实就相当于设计模式中的责任链模式的一种具体实现依赖 trait Handle{ def handle(data:String){} } trait DataValidHandler extend

Scala入门系列(八):面向对象之trait

基础知识 1 将trait作为接口使用 此时Trait就与Java中的接口非常类似,不过注意,在Scala中无论继承还是trait,统一都是extends关键字. Scala跟Java 8前一样不支持对类进行多继承,但是支持多重继承trait,使用with关键字即可 trait HelloTrait{ def sayHello(name: String) } trait MakeFriends{ def makeFriends(p: Person) } class Person(val name

scala习题精选100道

1.**[primary]**关于和Scala进行交互的基本方式REPL说法错误的是? C A.R 读取(read)B.E 求值(evaluate)C.P 解析(Parse)D.L 循环(Loop) 2.**[primary]**不属于Scala7种数值类型的是? D A.CharB.IntC.FloatD.LongLong 3.**[primary]**如果需要使用scala库中的sqrt函数,如sqrt(2),下列引用包的方式错误的是? B A.import scala.math._B.im