Scala 学习之 Class,Object, Trait
2014-09-09 20:34
621 查看
1 Class中的method的参数 默认 是 val,及不可修改类型
def Add(b:Byte)
{
b = 1; //will not compile
sum+=b;
}
2
2.1 Object 在scala里面的引入可能就是因为scala没有静态的方法和字段,没有办法 实现类似C++的singleton模型所以引入object
书上云 object是holder for static methods
2.2 Object由于上述原因,同类的差别在于没有状态,只有方法。换句话说成员中仅有val没有var,而且不能给object传递参数
2.3 Object定义并不表示声明了一个新的类型,定义一个变量是obj类型是错误的。
3
Trait可以带字段和状态同class一样,实际上trait同class完全一致,除了以下两点:
1 trait不能带参数,即构造函数中不能带参数,需要内 部定义抽象的method表示状态
class Point(x: Int, y: Int) OK
trait NoPoint(x: Int, y: Int) // Does not compile
2 super的调用时动态的,而不是静态的。
Trait 作用:
1 丰富接口
scala> trait myTrait{
| def a:Int
| def b:Int
| def sub = {
| a - b
| }
| }
defined trait myTrait
scala> class myClass(val a:Int,val b:Int) extends myTrait{
| }
defined class myClass
scala> val test = new myClass(1,2)
test: myClass = myClass@82feb7
scala> test.sub
res2: Int = -1
2 作用2 stackable 修改实体的class
对具体的类可以堆砌修改,比如实例类有 A B C D方法,来了个新需求仅仅修改B方法,这时可以定义一个trait单独实现B方法。
再让这个具体的类混入这个trait已达到新类功能。
def Add(b:Byte)
{
b = 1; //will not compile
sum+=b;
}
2
2.1 Object 在scala里面的引入可能就是因为scala没有静态的方法和字段,没有办法 实现类似C++的singleton模型所以引入object
书上云 object是holder for static methods
2.2 Object由于上述原因,同类的差别在于没有状态,只有方法。换句话说成员中仅有val没有var,而且不能给object传递参数
2.3 Object定义并不表示声明了一个新的类型,定义一个变量是obj类型是错误的。
3
Trait可以带字段和状态同class一样,实际上trait同class完全一致,除了以下两点:
1 trait不能带参数,即构造函数中不能带参数,需要内 部定义抽象的method表示状态
class Point(x: Int, y: Int) OK
trait NoPoint(x: Int, y: Int) // Does not compile
2 super的调用时动态的,而不是静态的。
Trait 作用:
1 丰富接口
scala> trait myTrait{
| def a:Int
| def b:Int
| def sub = {
| a - b
| }
| }
defined trait myTrait
scala> class myClass(val a:Int,val b:Int) extends myTrait{
| }
defined class myClass
scala> val test = new myClass(1,2)
test: myClass = myClass@82feb7
scala> test.sub
res2: Int = -1
2 作用2 stackable 修改实体的class
对具体的类可以堆砌修改,比如实例类有 A B C D方法,来了个新需求仅仅修改B方法,这时可以定义一个trait单独实现B方法。
再让这个具体的类混入这个trait已达到新类功能。
相关文章推荐
- scala学习---object、class、trait
- scala学习7--class、object、trait
- scala学习7--class、object、trait
- scala 学习:object 和class, trait
- 龟云狄眦-Scala学习札记【一】Scala中class、object、trait初识
- scala学习13之与trait同名的object对象
- scala class和object,trait的区别
- Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
- scala总结(1) -- trait, object, class等相关概念
- scala中Mixin类组合,了解object,trait,class,abstract class
- Scala中object、class与trait的区别
- scala学习笔记3-Actor、case class和object、loop和react的使用
- scala中的class、object和trait的区别
- Scala中object\class\trait的区别
- Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
- Scala学习笔记(二) object class
- scala class和object,trait的区别
- Scala学习笔记 --- scala中class与object
- Scala中object、class与trait的区别
- scala class和object,trait的区别