54.scala编程思想笔记——使用特征
2016-01-02 09:39
176 查看
54.scala编程思想笔记——使用特征
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50447607
源码下载连接请见第一篇笔记。
在Scala中,可以将模型划分为恰当的部分。而有些语言则强制进行笨拙的抽象。
特征以及他们的混合是这些工具中最强大的,特征不仅使得语法变得优雅而有意义,并且可以防止代码重复。
因此:
n 优先是使用特征而不是更具体的类型
n 将模型划分成相互独立的部分
n 延迟具体化
特征和抽象类的主要差别是特征不能有构造器参数。
例如:
importcom.atomicscala.AtomicTest._
traitAerobic {
val age:Int
def minAerobic = .5 * (220 - age)
def isAerobic(heartRate:Int) =
heartRate >= minAerobic
}
traitActivity {
val action:String
def go:String
}
classPerson(val age:Int)
classExerciser(age:Int,
val action:String = "Running",
val go:String = "Run!") extends
Person(age) with Activity with Aerobic
val bob =new Exerciser(44)
bob.isAerobic(180)is true
bob.isAerobic(80)is false
bob.minAerobicis 88.0
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50447607
源码下载连接请见第一篇笔记。
在Scala中,可以将模型划分为恰当的部分。而有些语言则强制进行笨拙的抽象。
特征以及他们的混合是这些工具中最强大的,特征不仅使得语法变得优雅而有意义,并且可以防止代码重复。
因此:
n 优先是使用特征而不是更具体的类型
n 将模型划分成相互独立的部分
n 延迟具体化
特征和抽象类的主要差别是特征不能有构造器参数。
例如:
importcom.atomicscala.AtomicTest._
traitAerobic {
val age:Int
def minAerobic = .5 * (220 - age)
def isAerobic(heartRate:Int) =
heartRate >= minAerobic
}
traitActivity {
val action:String
def go:String
}
classPerson(val age:Int)
classExerciser(age:Int,
val action:String = "Running",
val go:String = "Run!") extends
Person(age) with Activity with Aerobic
val bob =new Exerciser(44)
bob.isAerobic(180)is true
bob.isAerobic(80)is false
bob.minAerobicis 88.0
相关文章推荐
- 53.scala编程思想笔记——组合
- 52.scala编程思想笔记——多态
- 51.scala编程思想笔记——浅尝反射
- 50.scala编程思想笔记——应用
- 49.scala编程思想笔记——衔接JAVA
- 48.scala编程思想笔记——统一访问方式和setter
- 47.scala编程思想笔记——特征
- 46.scala编程思想笔记——抽象类
- Java并发API:闭锁 CountDownLatch
- 45.scala编程思想笔记——枚举
- 44.scala编程思想笔记——覆盖方法
- 【Java】Java连接sql2008数据库
- matlab图像处理
- 43.scala编程思想笔记——基类初始化
- 42.scala编程思想笔记——继承
- 41.scala编程思想笔记——伴随对象
- 40.scala编程思想笔记——元组
- 39.scala编程思想笔记——自动字符串转换
- 38.scala编程思想笔记——定义操作符
- 好玩的C#