文档章节

关于trait的几点思考

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

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

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

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

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

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

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

© 著作权归作者所有

共有 人打赏支持
牧师-Panda
粉丝 31
博文 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
phalcon 框架软删除与物理删除思考与实现

---title: phalcon 框架软删除与物理删除思考与实现date: 2018-09-11 11:44:36tags:PHP phalcon phalcon 框架软删除与物理删除思考与实现 在项目开发中,业务的不同则对数据库中数据的操作也是...

anziguoer
09/11
0
0
PHP traits (复用机制)

最近在学习Laravel中,遇到了很多关于Traits ,查了下资料,分享下。 提到 php 的代码复用,我们可能第一时间会想到继承,但是这种单继承语言一旦派生的子类过多,那么会产生一系列的问题,比...

Coding_ff
2017/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Zookeeper分析

沉稳2018
16分钟前
0
0
mockito learn one

mockito 介绍 mockito是一个很好用的模拟测试框架,能够让你写出简单优美测试,它不会给你残留的测试,因为它可读而且能够简单的验证错误。 如何使用? 引入依赖 <!-- https://mvnrepository...

writeademo
31分钟前
0
0
String转成JSON的实现

String转成JSON 这个依赖很重要,我们将围绕fastjson中的JSONObject这个类来谈转换 欢迎工作一到八年的Java工程师朋友们加入Java高级交流:854630135 本群提供免费的学习指导 架构资料 以及免...

编程SHA
43分钟前
1
0
详解Object.values(),Object.keys(),Object.entries(),Object.create(),includes()

(1)Object.keys() // 返回数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 eg:var obj = {a:1,b:'gy'} Object.keys(obj) // ['a','b'] (2)...

JamesView
今天
2
0
Git —— 创建版本库和提交回退版本

二、 创建版本库 版本库又叫做仓库,简单理解就是一个目录,这个目录里面所有的文件都可以被Git管理起来,每个文件的修改、删除,Git都可以跟踪,便于追踪历史与还原。找到一个合适的位置,创...

lwenhao
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部