Scala_特质
特质
特质概述
Java中提供了接口,允许一个类实现任意数量的接口
在Scala中没有接口的概念,而是提供了“特质(trait) ”,它不仅实 现了接口的功能,还具备了很多其他的特性
Scala的特质,是代码重用的基本单元,可以同时拥有抽象方法和具体方法
Scala中,一个类只能继承自一个超类,却可以实现多个特质,从而重用特质中的方法和字段,实现了多重继承
特质的定义
特质的定义和类的定义非常相似,有区别的是,特质定义使用关键字trait
trait CarId {
var id:Int
def currentId():Int
}
上面定义了一个特质,里面包含一个抽象字段id和抽象方法currentId。注 意,抽象方法不需要使用abstract关键字,特质中没有方法体的方法,默 认就是抽象方法
把特质混入类中
特质定义好以后,就可以使用extends或with关键字把特质混入类中
class BYDCarId extends CarId {
override var id: Int = 10000
override def currentId(): Int = {
id += 1
id
}
}
特质可以包含具体实现
上面的实例中,特质只包含了抽象字段和抽象方法,相当于实现了类似Java 接口的功能。实际上,特质也可以包含具体实现,也就是说,特质中的字段 和方法不一定要是抽象的
trait CarId {
var id:Int
def currentId():Int
def greeting(msg:String): Unit ={
println(msg)
}
}
把多个特质混入类中
上面已经定义了两个特质CarId和CarGreeting。可以把两个特质都混入到类中
trait CarId{
var id:Int
def currentId():Int
}
trait CarGreeting{
def greeting(msg:String): Unit ={
println(msg)
}
}
class BYDCarId extends CarId with CarGreeting {
override var id: Int = 10000
override def currentId(): Int = {
id += 1
id
}
}
object MyCar {
def main(args: Array[String]): Unit = {
val mycar = new BYDCarId()
mycar.greeting("welcome my first car.")
printf("My first CarId is %d.\n" , mycar.currentId())
}
}
// 执行结果
welcome my first car.
My first CarId is 10001.
Scala_特质的更多相关文章
- [转载]DBA的特质第二部分:性格
本文转自http://www.searchdatabase.com.cn/showcontent_84382.htm 支持原创.尊重原创,分享知识! 在本系列文章中,笔者将谈一谈数据库管理员(DBA) ...
- [转载]DBA的特质第一部分:技术
本文转自http://www.searchdatabase.com.cn/showcontent_84379.htm 支持原创.尊重原创,分享知识! 在本系列文章中,笔者将谈一谈数据库管理员(DBA) ...
- Scala学习笔记(七):Application特质
Scala提供了特质scala.Application 在单例对象名后面写上“extends Application”,把想要执行的代码直接放在单例对象的花括号之间 import ChecksumAc ...
- Objective-C中属性及其特质@property、attribute
属性: 属性@property和属性attribute不同,@property在OC里有自己的一套专对实例变量的处理机制.attribute我们可以特指属性所具有或遵循的特质. 使用属性,编译器就会自 ...
- scala特质
package com.ming.test /** * scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的 */ /** * 定义一个日志的特质 */ tra ...
- 解谜谷歌 DevOps:什么特质可以打造世界级可靠系统?
[编者按]本文是 Gene Kim 总结自对 Randy Shoup 两个小时的采访,主要关注谷歌 DevOps 的提升之道.本文系 OneAPM联合高效运维编译整理. Randy Shoup 曾协助 ...
- Scala学习笔记(三)类层级和特质
无参方法 功能:将方法的定义转换为属性字段的定义: 作用范围:方法中没有参数,并且方法仅能通过读取所包含的对象属性去访问可变状态,而不改变可变状态,就可使用无参方法: 例子: abstract cla ...
- scala学习笔记——特质
一个类扩展自一个或多个特质,以便使用这些特质提供的服务.特质可能会要求使用它的类支持某个特定的特性.不过和java不同,Scala特质可以给出这些特性的缺省实现. 特质的特性: 类可以实现任意数量的特 ...
- Scala学习笔记--特质trait
http://outofmemory.cn/scala/scala-trait-introduce-and-example 与Java相似之处 Scala类型系统的基础部分是与Java非常相像的.Sc ...
随机推荐
- 那些年我们遇到的坑(1)-Description Resource Path Location Type Archive for required library
在下载JAR包过程中遇到了错误,根据提示找到maven仓库报错的目录,将该目录下的所有文件删除重新下载即可
- PHP 文件操作代码
<?php //echo filetype("./1.jpg"); //判断文件类型 文件:file //echo filetype("./code"); ...
- iOS.FileSystem.HardLinkAndSymbolicLink
关于iOS中的硬连接和符号连接(软连接),iOS其实是Unix的变体, 所以在这方面也继承了Unix的特性,下面这个连接比较详细的进行了 类比说明. 1. http://www.tanhao.me/p ...
- BZOJ1935或洛谷2163 [SHOI2007]园丁的烦恼
BZOJ原题链接 洛谷原题链接 很容易想到二维前缀和. 设\(S[i][j]\)表示矩阵\((0, 0)(i, j)\)内树木的棵数,则询问的矩形为\((x, y)(xx, yy)\)时,答案为\(S ...
- python爬虫_简单使用百度OCR解析验证码
百度技术文档 首先要注册百度云账号: 在首页,找到图像识别,创建应用,选择相应的功能,创建 安装接口模块: pip install baidu-aip 简单识别一: 简单图形验证码: 图片: from ...
- $(QTDIR);$(QTDIR)\include\QtCore;$(QTDIR)\include;
$(QTDIR); 在系统环境变量中定义即可 vs属性中设置头文件路径
- 高负载PHP调优
高负载PHP调优 针对PHP的Linux调优 调整文件描述符限制 # ulimit -n 1000000 # vi /etc/security/limits.conf # Setting Shell ...
- gsl库安装
下载ftp://ftp.gnu.org/gnu/gsl/ 下载后解压,可以按照文件夹中INSTALL文件的指导,进入解压文件夹"gsl-2.4"执行以下5步: ./configur ...
- 【Tomcat】Tomcat + Memcached 实现session共享
概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解 ...
- Selenium实战总结(webwiew下拉框定位)
基于常见的两种下拉框的展示形式: 1.点击弹出下拉框: 2.鼠标移动弹出下拉框(move_to_element) 实例一[鼠标点击弹出的下拉框]: e.g百度首页的设置--高级搜索--时间: 导包: ...