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-09-14 01:37:08

SCALA当的trait的相关文章

Scala Trait

Scala Trait 大多数的时候,Scala中的trait有点类似于Java中的interface.正如同java中的class可以implement多个interface,scala中的calss也可以extend多个trait.因此你看你会看到类似于这样的代码: class Woodpecker extends Bird with TreeScaling with Pecking scala的trait具有比java中的interface强大的多的功能,正如同java中的abstract

scala 学习笔记(05) OOP(中)灵活的trait

trait -- 不仅仅只是接口! 接上回继续,scala是一个非常有想法的语言,从接口的设计上就可以发现它的与众不同.scala中与java的接口最接近的概念是trait,见下面的代码: package yjmyzz object App { def main(args: Array[String]) { val bird = Bird("pigeon") bird.fly println(bird.isInstanceOf[Bird]) //true println(bird.is

有趣的 Scala 语言:使用递归的方式去思考

在初学计算机编程时,我想大多数人的经历会和作者一样,学校为我们挑选一门语言,大多为 C 或 Java ,先是基本的数据类型,然后是程序控制语句,条件判断,循环等,书上会教我们如何定义一个函数,会说程 序就是一条一条的指令,告诉计算机该如何操作.同时,我们还会看到如何定义一个递归函数,用来计算阶乘 或斐波那契数列.工作以后,其他的这些基础还在日复一日的使用,但递归却很少再被用到,以致我们很难再 用递归的方式去解决问题了,为此,我们还有一个借口:递归性能差,使用循环效率高.事实真是这样的吗? 我们为

Scala入门到精通——第十节 Scala类层次结构、Traits初步

本节主要内容 Scala类层次结构总览 Scala中原生类型的实现方式解析 Nothing.Null类型解析 Traits简介 Traits几种不同使用方式 1 Scala类层次结构 Scala中的类层次结构图如下: 来源:Programming in Scala 从上面的类层次结构图中可以看到,处于继承层次最顶层的是Any类,它是scala继承的根类,scala中所有的类都是它的子类 Any类中定义了下面几个方法: //==与!=被声明为final,它们不能被子类重写 final def ==

Scala简单编程

1. Scala简单概述Scala是多范式编程语言,其设计的初衷是要集成面向对象编程和函数式编程以及各种特性.需要说明的一点是: Scala是基于java平台(JVM) ,并兼容现有的Java程序下面是Scala官方网址http://www.scala-lang.org/ 2.Scala编译器安装 安装JDK因为Scala是运行在JVM平台,所以这里JDK是必需的 安装Scala访问上面提供的Scala官网下载Scala编译器安装包 Windows系统环境安装Scala编译器 解压下载好的安装包

Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum

  Scalaz是由一堆的typeclass组成.每一个typeclass具备自己特殊的功能.用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上.scala这个编程语言借鉴了纯函数编程语言Haskell的许多概念.typeclass这个名字就是从Haskell里引用过来的.只不过在Haskell里用的名称是type class两个分开的字.因为scala是个OOP和FP多范畴语言,为了避免与OOP里的type和class发生混扰,所以就用了typecl

Scalaz(7)- typeclass:Applicative-idomatic function application

   Applicative,正如它的名称所示,就是FP模式的函数施用(function application).我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形式是这样的:F[A],即变量A是包嵌在F结构里的.Scalaz的Applicative typeclass提供了各种类型的函数施用(function application)和升格(lifting)方法.与其它scalaz typeclass使用方式一样,我们只需要实现了针对自定义类型的Applica

Java 8新特性

编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版.在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java 8中抽象类与接口的比较. 我们也在其他地方引用了15个必读的Java 8教程.当然,我们也探究了Java 8的一些不足之处,比如Java 8的"黑暗面". 现在,是时候把所有Java 8的重要

Scala入门到精通——第十一节 Trait进阶

本节主要内容 trait构造顺序 trait与类的比较 提前定义与懒加载 trait扩展类 self type 1 trait构造顺序 在前一讲当中我们提到,对于不存在具体实现及字段的trait,它最终生成的字节码文件反编译后是等同于java中的接口,而对于存在具体实现及字段的trait,其字节码文件反编译后得到的java中的抽象类,它有着scala语言自己的实现方式.因此,对于trait它也有自己的构造器,trait的构造器由字段的初始化和其它trait体中的语句构成,下面是其代码演示: pa