您的位置:首页 > 移动开发 > Objective-C

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已达到新类功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: