博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala-面向对象后章
阅读量:3883 次
发布时间:2019-05-23

本文共 1416 字,大约阅读时间需要 4 分钟。

特质(Trait)

  1. Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说,多个类具有相同的特质(特征)时,就可以将这个特质(特征)独立出来,采用关键字trait声明。
  2. Scala中的trait中即可以有抽象属性和方法,也可以有具体的属性和方法,一个类可以混入(mixin)多个特质。这种感觉类似于Java中的抽象类。
  3. Scala引入trait特征,第一可以替代Java的接口,第二个也是对单继承机制的一种补充。
trait 特质名 {
trait主体}
  1. 基本语法:一个类具有某种特质(特征),就意味着这个类满足了这个特质(特征)的所有要素,所以在使用时,也采用了extends关键字,如果有多个特质或存在父类,那么需要采用with关键字连接。

在这里插入图片描述

  1. 特质继承使用
没有父类:class  类名 extends  特质1   with    特质2   with   特质3 …有父类:class  类名  extends  父类   with  特质1   with   特	质2  with 特质3…

在这里插入图片描述

  1. 动态混入

在这里插入图片描述

  1. 特质常规冲突:一个类(Sub)混入的两个trait(TraitA,TraitB)中具有相同的具体方法,且两个trait之间没有任何关系,解决这类冲突问题,直接在类(Sub)中重写冲突方法。

在这里插入图片描述

  1. 特质混入冲突(特质叠加):一个类(Sub)混入的两个trait(TraitA,TraitB)中具有相同的具体方法,且两个trait继承自相同的trait(TraitC),及所谓的“钻石问题”,解决这类冲突问题,Scala采用了特质叠加的策略(将混入的多个trait中的冲突方法叠加起来)。

在这里插入图片描述

  1. 特质叠加顺序:如果想要调用某个指定的混入特质中的方法,可以增加约束:super[],例如super[Operation].describe()。
1. 列出混入的第一个特质一级继承关系,作为临时的叠加顺序(谁继承在前,谁在前面)	DBOperation ---> Operation2. 列出混入的第二个特质一级继承关系,加入临时的叠加顺序(重复的特质不再加入)	HDFSOperation ---> DBOperation --->  Operation3. 将子类放到临时叠加顺序的前面	MyOperation ---> HDFSOperation ---> DBOperation --->  Operation4. 在特质叠加的环境中,super关键字表示下一个特质	MyOperation is ----> 向HDFS中向MySQL中插入数据

在这里插入图片描述

  1. 特质自身注入:自身类型可实现依赖注入的功能。

在这里插入图片描述

  1. 特质和抽象的区别
1. 抽象类中可以定义抽象属性,抽象方法,非抽象属性,非抽象方法2. 特质中可以3. 抽象类和特质都不能实例化,且都有主构造 方法4. 优先选择特质,scala语言是单继承,如果继承抽象类扩展不方便5. 如果需要构造方法传递参数,使用抽象类,因为抽象类的构造方法中,可以定义带参数构造,但是特质中不允许6. 一般子类和父类之间满足“is-a”原则,使用抽象类7. 特质一般是对行为进行抽象,定义规范

扩展

  1. 类型检查

在这里插入图片描述

  1. 枚举类和应用类

在这里插入图片描述

  1. Type定义新类型:使用type关键字可以定义新的数据数据类型名称,本质上就是类型的一个别名(String底层源也是用的type调用的java.lang.String)

在这里插入图片描述

转载地址:http://atzhn.baihongyu.com/

你可能感兴趣的文章
【Java.JDBC/ORM】纯JDBC系统的开发随想
查看>>
【Unix/Linux】【系统】环境变量
查看>>
【Architecture】CPU-bound(计算密集型) 和I/O bound(I/O密集型)
查看>>
【MacOS】Mac 系统下类似于 apt-get 的软件包管理器 -- Homebrew
查看>>
为窗口添加鼠标HOVER和LEAVE事件
查看>>
VC小技巧20个
查看>>
MFC Feature Pack for Visual C++ 2008的BUG之一
查看>>
POJ - 2739 Sum of Consecutive Prime Numbers
查看>>
STL map映照容器(一)map创建、元素插入、元素删除和遍历访问
查看>>
Leetcode - 557反转字符串中的单词III
查看>>
Leetcode - 160相交链表
查看>>
Leetcode - 11盛最多水的容器
查看>>
Leetcode - 141环形链表
查看>>
Leetcode - 14最长公共前缀
查看>>
Leetcode - 7整数反转
查看>>
PAT---B1022. D进制的A+B (20)
查看>>
PAT---B1037. 在霍格沃茨找零钱(20)
查看>>
PAT---A1019. General Palindromic Number (20)
查看>>
PAT---A1027. Colors in Mars (20)
查看>>
PAT---1058. A+B in Hogwarts (20)
查看>>