文档章节

关于trait的几点思考

牧师-Panda
 牧师-Panda
发布于 2017/08/25 18:35
字数 463
阅读 13
收藏 0
点赞 0
评论 0

当你实现了一个可重用的行为集合时,你将必须决定是使用特质还是抽象类。这里没有固定的规律,但是本节包含了几条可供考虑的导则。

如果行为不会被重用,那么就把它做成具体类。具体类没有可重用的行为。

如果要在多个不相关的类中重用,就做成特质。只有特质可以混入到不同的类层级中。

如果你希望从Java代码中继承它,就使用抽象类。因为特质和它的代码没有近似的Java模拟,在Java类里继承特质是很笨拙的。而继承Scala的类和继承Java的类完全一样。除了一个例外,只含有抽象成员的Scala特质将直接翻译成Java接口,因此即使你想用Java代码继承,也可以随心地定义这样的特质。

如果你计划以编译后的方式发布它,并且你希望外部组织能够写一些继承自它的类,你应更倾向于使用抽象类。原因是当特质获得或失去成员,所有继承自它的类就算没有改变也都要被重新编译。如果外边客户仅需要调用行为,而不是继承自它,那么使用特质没有问题。

如果效率非常重要,倾向于类。大多数Java运行时都能让类成员的虚方法调用快于接口方法调用。特质被编译成接口,因此会付出微小的性能代价。然而,仅当你知道那个存疑的特质构成了性能瓶颈,并且有证据说明使用类代替能确实解决问题,才做这样的选择。

© 著作权归作者所有

共有 人打赏支持
牧师-Panda
粉丝 27
博文 146
码字总数 180044
作品 0
浦东
PHP中实现代码复用的Trait方法的一些特性

在整理“PHP基础”这篇文档时,看到了trait方法,感觉比较陌生,所以今天上午用两个小时的时间,查阅测试了trait方法的一些特性及用法,整理发布了这篇博客。 Trait 是 PHP5.4 中的新特性,是...

尘世如潮
2016/04/12
447
0
【Spark亚太研究院系列丛书】Spark实战高手之路-第2章动手实战Scala第2小节(2)

3,动手实战Scala中的抽象类 抽象类的定义需要使用abstract关键字: 上面的代码定义并实现了抽象方法,需要注意的是我们把直接运行的代码放在了App这个trait的子类中,关于App内部帮助我们实...

Spark亚太研究院
2014/11/27
0
0
深入理解 Rust 的动态分派模型

让我做个开场白,我是rust世界的新手(虽然我喜欢它很久了),如果我犯了技术性错误,请让我知道并且我会尽力纠正它们。说到这为止,让我们开始吧! 在下面的代码片段中可以看到我深入研究动...

xiaoaiwhc1
05/09
0
0
再谈Scala集合

集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再回过头再梳理一下。 本文原文出处: 本文原文链...

bluishglc
2017/12/14
0
0
关于Scala多重继承的菱形问题

在Scala中的trait中引入了混入的概念,即Mixin of trait。 什么是混入(mixin) 可能翻译不准确,有人也称之为混入类(mixins),混入是一种组合的抽象类,主要用于多继承上下文中为一个类添加...

Barudisshu
2015/05/25
0
1
DoABC完全解析,接test.swf

一直想写一个DoABC的解析,不过是一个比较大的工程,接上次的这个 解析SWF底层 写,例子还是test.swf。 现在开始: 还是先上图: 选中的部分就是要解析的DoABC,这个标签是存储as3.0代码的地...

水水鱼
2014/03/07
0
1
Groovy 2.3 trait语法介绍

Groovy 2.3 trait语法介绍 http://www.javacodegeeks.com/2014/04/groovy-2-3-introduces-traits.html 前几天,Groovy 2.3的第二个beta版本发布。Groovy 2.3最重要的新特性之一是trait语法。...

翟志军
2014/04/29
0
4
Scala中trait的使用详情

单基础多实现,但是接口只能包含抽象方法,不能包含字段。 trait可以同时拥有抽象方法和具体方法,而类可以实现多个trait。 做接口使用的trait trait Logger{ } 不需要将方法声明为abstract—...

LC900730的博客
2017/12/18
0
0
scala中的trait

这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适。它的意义和java,c#中接口很类似。但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法。 下面我们以一个...

lry77
2016/08/11
4
0
scala入门-07特质类(trait)的使用

trait类似于Java8中的可用带default method的接口。 trait中可以带有实现的方法,也可以带有抽象方法,使用trait的方法是with而混入类中。 我们在scala下的org.scala.clazz下创建一个类MyTra...

stark_summer
2015/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
18分钟前
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部