Scala特质

特质:trait是Scala里代码复用的基础单元。特质封装了方法和字段的定义,并可以通过混入到类中重用它们。不像类的继承那样,每个类都只能继承唯一的超类,类可以混入任意个特质。它们最常用到的两种方式:拓宽瘦接口为胖接口和定义可堆叠的改变。

这个特质名为Philosophical。它没有声明超类,因此和类一样,有个缺省的超类AnyRef。它定义了一个方法,叫做philosophize,具体的。这是个简单的特质,仅够说明特质如何工作。一旦特质被定义了,就可以使用extends或with关键字,把它混入到类中。下列这种情况下隐式地继承了特质的超类,从特质继承的方法可以像从超类继承的方法那样使用。

特质同样也是类型:phil的类型是Philosophical,一个特质。因此,变量phil可以被初始化为任何混入了Philosophical特质的类的对象。

特质就像是带有具体方法的Java接口,不过其实它能做的更多。特质可以,比方说,声明字段和维持状态值。实际上,你可以用特质定义做任何用类定义做的事,并且语法也是一样的,除了两点。第一点,特质不能有任何“类”参数,也就是说,传递给类的主构造器的参数。

时间: 2024-12-25 16:17:12

Scala特质的相关文章

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中一个类仅仅能继承一个抽象类,假设要实现多个抽象类就必需使用

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来使用特质,这样,使用了特质的这个类就

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