package com.ming.test

/**
* scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的
*/ /**
* 定义一个日志的特质
*/
trait LoggerTrait {
def logger(str:String):String
def loggerDev(str:String):String={"hello"}
} /**
* 定义一个是否相等的特质
*/
trait EqualTrait {
def isEqual(x: Any): Boolean
def isNotEqual(x: Any): Boolean = !isEqual(x)
} /**
* 定义一个类,继承上面两个特质
*/
class LoggerClass(xc: Int, yc: Int) extends LoggerTrait with EqualTrait{
var x: Int = xc
var y: Int = yc
def isEqual(obj: Any) =
obj.isInstanceOf[LoggerClass] &&
obj.asInstanceOf[LoggerClass].x == x def logger(str:String):String={str}
} /**
* 定义一个空类,打算在使用的时候去实现特质
*/
class KongClass{ } object TraitTest{
def main(args: Array[String]): Unit = { var a=new LoggerClass(5,6);
var b=new LoggerClass(5,6);
var c=new LoggerClass(5,7);
println(a.isEqual(b));
println(a.isEqual(c));
println(a.isNotEqual(c));
println(a.loggerDev("")); //空类使用继承不同的特质,类似与java实现接口哦
var kong1=new KongClass with LoggerTrait{
def logger(str:String):String={str}
}
val str=kong1.logger("kong1")
println(str) }
}
特质构造顺序
特质也可以有构造器,由字段的初始化和其他特征体中的语句构成。这些语句在任何混入该特质的对象在构造是都会被执行。
构造器的执行顺序:
调用超类的构造器;
特质构造器在超类构造器之后、类构造器之前执行;
特质由左到右被构造;
每个特质当中,父特质先被构造;
如果多个特质共有一个父特质,父特质不会被重复构造
所有特质被构造完毕,子类被构造。

scala特质的更多相关文章

  1. Scala 特质全面解析

    要点如下: Scala中类只能继承一个超类, 可以扩展任意数量的特质 特质可以要求实现它们的类具备特定的字段, 方法和超类 与Java接口不同, Scala特质可以提供方法和字段的实现 当将多个特质叠 ...

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

    scala中特质定义:包括一些字段,行为(方法/函数/动作)和一些未实现的功能接口的集合,能够方便的实现扩展或混入到已有类或抽象类中. scala中特质(trait)是一个非常实用的特性,在程序设计中 ...

  3. 8.scala:特质

    版权申明:转载请注明出处.文章来源:http://bigdataer.net/?p=317 总体来说,scala中的特质类似于Java中的接口,但是有别于接口的是特质中既可以有实现方法也可以有抽象方法 ...

  4. scala 特质的应用

    一.为类提供可以堆叠的改变 package com.jason.qianfeng trait Loggertest { def logger(msg: String) } trait ConsoleL ...

  5. scala学习笔记——特质

    一个类扩展自一个或多个特质,以便使用这些特质提供的服务.特质可能会要求使用它的类支持某个特定的特性.不过和java不同,Scala特质可以给出这些特性的缺省实现. 特质的特性: 类可以实现任意数量的特 ...

  6. 快学Scala之特质

    一个Scala类可以继承多个特质(trait), 特质可能会要求使用它们的类支持某个特定特性, 与Java接口不同, Scala特质可以给出这些特质的缺省实现. 要点如下: Scala中类只能继承一个 ...

  7. Scala入门2(特质与叠加在一起的特质)

    一.介绍 参考http://luchunli.blog.51cto.com/2368057/1705025 我们知道,如果几个类有某些共通的方法或者字段,那么从它们多重继承时,就会出现麻烦.所以Jav ...

  8. 快学Scala习题解答—第十章 特质

    10 特质 10.1 java.awt.Rectangle类有两个非常实用的方法translate和grow,但可惜的是像java.awt.geom.Ellipse2D这种类没有. 在Scala中,你 ...

  9. Scala学习十——特质

    一.本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段,方法或超类 和Java接口不同,Scala特质可以提供方法和字段实现 当你将多个特质叠加在一起时,顺序很重要——其方法先 ...

随机推荐

  1. each的详解

    首先我还是先观察w3c讲解: 先写一段代码,如图: 定义:each() 方法规定为每个匹配元素规定运行的函数. 提示:返回 false 可用于及早停止循环.(我在代码中加了return false,发 ...

  2. svn使用svnsync实现双机热备

    前提条件: 主:10.11.100.205从:10.11.100.50 源目录:http://10.11.100.205/svn/rep-ops目标目录:http://10.11.100.50/svn ...

  3. docker启动Mysql(转)

    cs202@cs202-devbox:~$ sudo docker run -d mysql7698fdd7a2d05d38cf19c60cc9e35c1117fc551ae5e31914494715 ...

  4. python 模块zlib 压缩与解压

    例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zli ...

  5. MagicNotes:自我管理中的破窗效应

    MagicNotes,思绪随风飞扬,偶尔在这里停留. 在<程序员修炼之道——从小工到专家>这本书里,有这么一段描述: 在市区,有些建筑漂亮而整洁,而另一些却是破败不堪的“废弃船只”.为什么 ...

  6. iOS获取运营商的相关信息

    1.导入:CoreTelephony.framework 2.添加头文件 #import <CoreTelephony/CTTelephonyNetworkInfo.h> #import ...

  7. mysql:on duplicate key update与replace into

    在往表里面插入数据的时候,经常需要:a.先判断数据是否存在于库里面:b.不存在则插入:c.存在则更新 一.replace into 前提:数据库里面必须有主键或唯一索引,不然replace into ...

  8. views of postgresql user password and encrypted or unencrypted

    password_encryption = onpostgres=# create user user1 with encrypted password 'user1';CREATE ROLEpost ...

  9. 配置hibernate根据实体类自动建表功能(转载)

    hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  10. MFC主窗口架构模型

    根据主窗口类型,MFC软件工程可以分为一下几种架构模型: 1.SDI(Simple Document Interface)单文档界面,一个主窗口下只编辑一份文档 2.MDI(Multiple Docu ...