1、  将trait作为接口使用

2、trait中定义具体方法

3、trait定义具体字段

4、trait中定义抽象字段

5、为实例对象混入trait

6、trait调用链

7、在trait中覆盖抽象方法

8、混合使用trait的具体方法和抽象方法

9、trait的构造机制

10、trait field的初始化

11、trait继承class

1、  将trait作为接口使用

  在scala中,trait是一种特殊的概念,可以将trait作为接口来使用。

  Trait可以定义抽象方法,与抽象类中的抽象方法一样,只要不给出方法的具体实现即可。

  类可以使用extends关键字继承trait,sclaa中没有implement的概念,无论继承还是trait。

  类继承trait后,必须实现其中的抽象方法,实现时不需要使用override关键字。

  Scala不支持对类进行多继承,但是支持多继承trait,使用with关键字即可。

  

2、trait中定义具体方法

  Trait不是只定义抽象方法,还可以定义具体方法,此时trait更像是包含了通用工具的方法。

  有一个专有名词来形容这种情况,就是说trait的功能混入了类。

  Trait中可以包含一些很多类都通用的功能方法,比如打印日志等等。

  

3、trait定义具体字段

  Trait可以定义具体field,此时继承trait的类就自动获得了trait中定义的field。

  这种获取field的方式与继承class是不同的,如果是继承class获取的field,实际上是定义在父类中的,而继承trait获取的field,就直接被添加到了类中。

  

4、trait中定义抽象字段

  Trait可以定义抽象field,而trait中的具体方法则可以基于抽象field来编写。

  继承trait的类,必须覆盖抽象field,并提供具体的值。

  

5、为实例对象混入trait

  有时候我们创建类的时候,指定该对象混入某个trait,这样就只有这个对象混入该trait的方法,而类的其他对象则没有。

  

6、trait调用链

  Scala中支持让类继承多个trait,依次调用多个trait中的同一个方法,只要让多个trait的同一个方法中,在最后都执行supper方法即可。

  类中调用多个trait中都有的这个方法时,首先会从最右边的trait的方法开始执行,依次往左执行,形成一个调用链条。

  这种特性非常强大,其实就相当于设计模式中的责任链模式的一种具体实现依赖。

  

7、在trait中覆盖抽象方法

  Trait中,可以覆盖父trait的抽象方法。覆盖时,如果使用了super.方法的代码,则无法通过编译。因为super.方法就会去掉用父trait的抽象方法,此时子trait的该方法还是会被认为是抽象的。如果要通过编译,就得给trait的方法加上abstract override修饰。

  

8、混合使用trait的具体方法和抽象方法

  在trait中,可以混合使用具体方法和抽象方法,可以让具体方法依赖于抽象方法,而抽象方法则放在继承trait的类中去实现。

  这种trait其实就是设计模式中的模板设计模式的体现。

  

9、trait的构造机制

  Trait有构造函数,就是不包含任何方法中的代码。

  而继承了trait的类的构造机制如下:

  1、  父类的构造函数执行

  2、  Trait的构造代码执行,多个trait从左到右依次执行

  3、  构造trait时会先构造父trait,如果多个trait继承同一个父trait,则父trait只会构造一次。

  4、  所有trait构造完毕后,子类的构造函数执行。

  

10、trait field的初始化

  Scala中,trait没有接受参数的构造函数,如果需求就是要trait能对field进行初始化,只能使用scala中非常特殊的一种高级特性,即提前定义。

  两种提前定义

  

  另外一种方式就是使用lazy value

  

11、trait继承class

  Scala中,trait可以继承自class,此时这个class就会成为所有继承该trait的类的父类。

  

10、scala面向对象编程之Trait的更多相关文章

  1. 8、scala面向对象编程之Trait

    一.Trait基础 1.将trait作为接口使用 // Scala中的Triat是一种特殊的概念 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 // 在t ...

  2. Scala 面向对象编程之Trait

    将trait作为接口使用 // Scala中的Triat是一种特殊的概念 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 // 在triat中可以定义抽象方 ...

  3. scala学习笔记-面向对象编程之Trait

    将trait作为接口使用 1 // Scala中的Triat是一种特殊的概念 2 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 3 // 在triat中可 ...

  4. Scala编程入门---面向对象编程之Trait高级知识

    trait调用链 Scala中支持让类继承多个Trait后,依次调用多个Trait中的同一个方法,只要让多个trait的同一个方法中,在最后都执行super.方法即可 类中调用多个trait中都有这个 ...

  5. Scala编程入门---面向对象编程之Trait

    Scala中Trait是一种特殊概念 首先我们可以将Triat做为接口来使用,此时的Triat就与java中的接口非常相似 在Triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出具体的 ...

  6. 9、scala面向对象编程之继承

    1.  extends 2.override 和super 3.override field 4.isInstanceOf和asInstanceOf 5.getClass和classOf 6.使用模式 ...

  7. 8、scala面向对象编程之对象

    1.  Object 2.伴生对象 3.让object继承抽象类 4.apply方法 5.main方法 6.用object实现枚举功能 1.  Object Object,相当于class的单个实例, ...

  8. Scala 面向对象编程之对象

    此对象非彼java bean对象 是scala object的对象 Object // object,相当于class的单个实例,通常在里面放一些静态的field或者method // 第一次调用ob ...

  9. Scala 面向对象编程之继承

    extends关键字 // Scala中,让子类继承父类,与Java一样,也是使用extends关键字 // 继承就代表,子类可以从父类继承父类的field和method:然后子类可以在自己内部放入父 ...

随机推荐

  1. 洛谷——P1255 数楼梯

    题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入输出格式 输入格式: 一个数字,楼梯数. 输出格式: 走的方式几种. 输入输出样例 输入样例# ...

  2. VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程

    http://unmi.cc/vmware9-install-mac-os-x-mountain-lion 非常详细,赞一下 本教程是在 VMware 9 下安装当前最新版的 Mac OS X Mou ...

  3. 【CV论文阅读】Rank Pooling for Action Recognition

    这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...

  4. Proxy Server代理服务器(轉載)

    宽带IP城域网开通以来,单位连上了宽带网,10M的带宽让我们感受到了宽带的魅力.电信只提供7个IP地址,对任何一个单位来说都太少了,常用的解决办法是使用代理服务器.微软的MS Proxy Server ...

  5. 新博客有了,文章转移到 http://www.iosxxx.com/

    文章转移到 http://www.iosxxx.com/ ,敬请大家关注

  6. 创建SharePoint 2010 Timer Job

    好久没有写博客了. 近期在使用SharePoint 2010中Timer Job的功能,有了一点心得,分享一下. 我个人觉得SharePoint Timer Job和Windows Service或者 ...

  7. Oracle 用户管理(二)

    1    给某人赋予"系统权限"     SQL> grant connect to aobama with admin option     意思是将admin的连接数据库 ...

  8. mysql20170410练习代码+笔记

    今天的几道高级sql查询真的挺难的,感觉好像视频里讲过,当时也没有练,已经淡化了很多,sql还是要多练习啊!确实逻辑性挺强的. SELECT studentResult,studentNO FROM ...

  9. typescript 入门例子 Hello world——ts就是一个宿主机语言

    安装 TypeScript TypeScript 的命令行工具安装方法如下: npm install -g typescript 安装完成之后,就有了 tsc 命令.编译一个 TypeScript 文 ...

  10. 使用自定义的AlertDialog。

    使用自定义的AlertDialog.1.核心的方法是setView(View view):把自己的view放置到dialog中填充.2.setCanceledOnTouchOutside(boolea ...