1,scala提供的“特征”可以同时拥有抽象方法和具体方法,一个类可以拥有多个特质

2,类可以通过“extends”关键字继承trait,继承trait后必须实现trait中的所有抽象方法,而不是用 override 关键字

3,scala的类只能单继承,单可以继承多个trait,trait之间使用 with 关键字连接

 package scalaTest

 object TraitApp{
// 创建trait
trait trait1{
// 没有具体实现的方法
def sayTrait(name : String)
// 有具体实现的方法
def sayHello = println("nice to meet you")
} trait tarit2{
def sysTrait2(age : Int)
} trait trait3{
def sysTrait3(num : Int)
} class Person(private var name : String) extends trait1 with tarit2{
def getName = name
def sayTrait(name : String) = println("Hello " + name)
def sysTrait2(age : Int) = println(name + " is " + age)
} def main(args: Array[String]): Unit = {
val p = new Person("trait")
p.sayTrait(p.getName)
p.sysTrait2(33)
p.sayHello // 可在创建对象时用with
val p1 = new Person("TRAIT") with trait3{
def sysTrait3(num : Int) = println(num)
}
p1.sysTrait3(33)
}
}

4,trait中可定义抽象字段(没有初始化的字段)和具体的字段(已经初始化了的字段), 类继承了trait后,必须实现抽象字段,即初始抽象字段,类中可以直接使用trait中字段。而类继承了类,需使用 super 关键字使用父类中的字段。

5,继承多个trait的时候,总体构造原则是“从左到右,从父到子构造从右到左,从子到父调用”。

6,自身类型(selftype)

有很多特质不是所有类都能随随便便继承的,例如异常类所能继承的特质,其他类继承并不合适,所以需要对特质加以约束。

通过“this : T => {}”的形式,指定这个特质只能被T或T的子类继承

也可以通过“this : {}  => {}”的形式,指定这个特质能被继承的规则,“this : {}”中的“{}”就可以设置规则,比如必须拥有指定对象、方法的类才能继承这个特质。

需要注意的是,只能定义一次自身类型,不能定义多个this

Scala_Trait特征的更多相关文章

  1. 卷积神经网络提取特征并用于SVM

    模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...

  2. [占位-未完成]scikit-learn一般实例之十一:异构数据源的特征联合

    [占位-未完成]scikit-learn一般实例之十一:异构数据源的特征联合 Datasets can often contain components of that require differe ...

  3. PRINCE2特征(三)

    提到不确定性,可能很多从事项目管理相关工作的人都会感同身受,一系列临时性问题,比如:变更.延期.调整.计划赶不上变化.团队调整等的出现,都是项目中再正常不过的内容.但正常不等于合理,我们还是要去思考一 ...

  4. PRINCE2特征(二)

    英国体系环境下项目有什么特征(二) 今天又要和大家分享了,这个时间也是自己很喜欢的时刻.上次给大家分享的是英国体系下项目的特征之一:临时性.不知道大家还有没有印象,英国体系下项目的特征有五个,今天来给 ...

  5. P2特征(一)

    很多人在提到项目的特征,肯定能说出来很多的内容,但是在英国体系下,项目的特点有哪些呢?这些特点引深的内容又有什么深度的含义.         项目具有临时性:很多人都知道项目是临时的,结束了就团队成员 ...

  6. sift特征

    已经有很多博客已经将sift特征提取算法解释的很清楚了,我只是记录一些我不明白的地方,并且记录几个理解sift特征比较好的博客. 1. http://aishack.in/tutorials/sift ...

  7. sift特征源码

    先贴上我对Opencv3.1中sift源码的注释吧,虽然还有很多没看懂.先从detectAndCompute看起 void SIFT_Impl::detectAndCompute(InputArray ...

  8. kaggle入门2——改进特征

    1:改进我们的特征 在上一个任务中,我们完成了我们在Kaggle上一个机器学习比赛的第一个比赛提交泰坦尼克号:灾难中的机器学习. 可是我们提交的分数并不是非常高.有三种主要的方法可以让我们能够提高他: ...

  9. OpenCV特征点检测------ORB特征

    OpenCV特征点检测------ORB特征 ORB是是ORiented Brief的简称.ORB的描述在下面文章中: Ethan Rublee and Vincent Rabaud and Kurt ...

随机推荐

  1. oracle 用户系统权限

    conn sys as sysdba; create user test identified by test; grant create session to test; grant create ...

  2. C/C++内存分区

    C/C++编译的程序占用的内存分区 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等.其操作方式类似于数据结构中的栈. 2.堆区(heap)— 由程序员分配释放, 若 ...

  3. Oracle GI 日志收集工具 - TFA

    1.TFA的目的: TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断:T ...

  4. [翻译] UIGlossyButton

    UIGlossyButton https://github.com/waterlou/UIGlossyButton Feature create standard iPhone buttons wit ...

  5. 汽车学习---汽车知识大全【all】

    汽车驱动/发动机/大灯 侧方位停车和倒车入库技巧 手动挡车型 换档8大技巧 常见的掉头情况注意事项 最全的左转,右转,待转,掉头方法 开车技巧大汇总,尤其适合新手司机 汽车常识扫盲,不做“汽车小白”! ...

  6. Linux 系统开机自启的配置文件

    程序开机启动的配置文件(/etc/rc.local) # 系统级别 ntsysv # 图形界面设置自启程序 chkconfig(/etc/init.d/sshd) 处理开机启动的文件 # 用户级别 # ...

  7. Nginx-基础配置

    正文 本文转载自:http://www.ha97.com/5194.html 文章经过我排版和润色再加工,更加易读.实在是了解nignx配置的基础好文章. 正文 定义Nginx运行的用户和用户组 us ...

  8. 【Anisble 文档】【译文】测试策略

    最近在琢磨 ansible,想使用这个搞一个自动发布部署系统,google以下发现了中文文档,但是里面很多感觉不专业,念都念不顺.看英文版又费劲,只能啃完中文啃英文. 本篇是译文第一篇,后续持续维护. ...

  9. 【记录】有趣的python模块记录

    1. paramiko: 基于SSH用于连接远程服务器并执行相关操作,公钥私钥登录等等

  10. 【原创】Apache ab结果参数详解

    解释如下: Server Software 服务器软件软件名称. Server Hostname 被测服务器的主机名. Server Port 被测试的Web服务器的监听端口. SSL/TLS Pro ...