8.scala:特质

版权申明:转载请注明出处。
文章来源:http://bigdataer.net/?p=317

总体来说,scala中的特质类似于Java中的接口,但是有别于接口的是特质中既可以有实现方法也可以有抽象方法。

1.特质的定义

使用关键字trait来定义一个特质,如:

scala    5行

trait Log{
 def info(msg:String)
 def debug(msg:String){print(msg)}
}

2.特质的使用

通过关键字extends来使用特质,这样,使用了特质的这个类就混入了特质的实现方法和抽象方法。其中,实现方法可以直接使用,抽象方法可以在类中实现,需要注意的是重写这些方法不需要使用注解override。如:

scala    7行

class Cat extends Log{
 //实现抽象方法
 def info(msg:String){print("I am a cat")}
 //直接使用已实现的方法
 debug("I am running")
}

3.特质的叠加

可以为一个类添加多个特质,使用关键字with连接。如果添加的多个特质里面有相同的方法,可以使用super[T].method()来指定使用哪个特质里面的方法。如……[阅读全文]

时间: 2024-11-05 09:48:34

8.scala:特质的相关文章

Scala特质

特质:trait是Scala里代码复用的基础单元.特质封装了方法和字段的定义,并可以通过混入到类中重用它们.不像类的继承那样,每个类都只能继承唯一的超类,类可以混入任意个特质.它们最常用到的两种方式:拓宽瘦接口为胖接口和定义可堆叠的改变. 这个特质名为Philosophical.它没有声明超类,因此和类一样,有个缺省的超类AnyRef.它定义了一个方法,叫做philosophize,具体的.这是个简单的特质,仅够说明特质如何工作.一旦特质被定义了,就可以使用extends或with关键字,把它混

Scala2.11.7学习笔记(六)Scala特质介绍

特质 Scala的trait 和Java 的Interface相比,可以有方法的实现.Scala的Trait支持类和Singleton对象和多个Trait混合(使用来自这些Trait中的 方法,而不时不违反单一继承的原则). Scala为Singleton对象的main定义了一个App trait类型,因此上面的例子可以简化为: HelloWorld.scala object HelloWorld extends App {     println("Hello World!"); }

scala akka 修炼之路5(scala特质应用场景分析)

scala中特质定义:包括一些字段,行为(方法/函数/动作)和一些未实现的功能接口的集合,能够方便的实现扩展或混入到已有类或抽象类中. scala中特质(trait)是一个非常实用的特性,在程序设计中能够 更好的抽象现实.使程序更关注各自功能和更好的将程序拆分成多个特质模块,使程序具有更强的扩展性.熟悉java的同学.能够将特质理解为抽象类.可是scala中能够在一个类中同一时候混入多个特质(使用extends 或with).而java中一个类仅仅能继承一个抽象类,假设要实现多个抽象类就必需使用

scala 特质

package com.jason.qianfeng trait Iterator[A] { val name = "Iterator" def hasNext: Boolean def next: A } trait Log { def log(msg: String): Unit = { println(msg) } } class IntIterator(to: Int) extends Iterator[Int] with Log { var current = 0 overr

Scala中的特质详解

Scala中的特质与Java中的接口是比较类似的,但是Scala中的特质可以同时拥有抽象方法和具体方法,而类可以实现多个特质.下面我们详细讲解Scala中的特质这个强大的功能. 1. 把特质当作接口使用 我们定义一个trait,如下所示: 1 trait Logger { 2 def log(msg: String) 3 } 需要注意的是trait中未被实现的方法默认是抽象方法,因此不需要在方法前加abstract. 子类ConsoleLogger对Logger的实现,如下所示: 1 class

【转】Scala学习——特质

原文链接 http://nerd-is.in/2013-08/scala-learning-traits/ 原文发表于http://nerd-is.in/2013-08/scala-learning-traits/ Scala特质可以给出特质的缺省实现 不支持多重继承 Scala也还是不支持多重继承. 如果几个类有某些共通的方法或者字段,那么从它们多重继承时, 就会出现麻烦.所以Java被设计成不支持多重继承,但可实现任意多的接口. 接口只能包含抽象方法,不能包含字段. 而Scala中的特质,可

快学Scala第10章----特质

本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段.方法或超类 和Java接口不同,Scala特质可以提供方法和字段的实现 当你将多个特质叠加在一起时,顺序很重要--其方法先被执行的特质排在更后面 为什么没有多重继承 Scala和Java一样不允许类从多个超类继承:从多了超类继承可能会导致许多问题,例如两个超类有相同的方法,子类该如何使用和菱形继承.在java 中类只能扩展自一个超类,它可以实现任意数量的接口,但接口只能包含抽象方法,不能包含字段. Scala提供了特质(

Scala基础07:特质

多重继承的问题 多重继承产生菱形继承问题.解决多重继承可能导致的问题消耗的资源远比多重继承产生的价值高. 特质 Java8中新增一个特性:default method ,可以在interface中实现的方法.Scala特质类似Java 8的interface. Scala类只能继承一个父类,但可以由多个特质拓展而成.Scala不支持多重继承,取而代之的是特质.Trait可以作为工具方法混入到相关类中. Scala使用特质达到类似多重继承的效果.一个类可以扩展自一个或多个特质,一个特质可以被多个类

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