开发者学堂课程【Scala 核心编程-基础:Scala 接口基本介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8989
Scala 接口基本介绍
内容介绍
一、Scala 接口基本介绍
二、trait 原理图
一、Scala 接口基本介绍
1、从面向对象来看,接口并不属于面向对象的范畴,因为抽象类可以说是面向对象的,而接口的本质是对继承机制的一个补充,因此,马丁认为,接口并不属于面向对象。Scala 是纯面向对象的语言,所以在 Scala 中没有接口。
2、Scala 语言中,采用特质 trait (特征)来代替接口的概念,可以理解 trait 等价于 Java 中接口加上抽象类(interface + abstract class),也就是说,trait 既可以有抽象方法,有可以有非抽象方法,普通方法,有多个类具有相同的特征(特征)时,就可以将这个特质(特征)独立出来,采用关键字 trait 声明。
二、trait 原理图
如图,假设定义接口为 Java 接口,C 继承 B,B 继承 A,那么如果要让 B 去实现这个接口,只需要使用 implements去实现 Inter01就可以,而 Scala 中的特质 trait 有以下几个概念。
第一首先它的概念已经不叫实现,而叫继承。因为 trait 等价于接口加上抽象类,如果站在抽象类的角度来解释,也是说得通的。所以这个概念 implements 也就没有了。
第二,Scala 强大之处在于加入了动态混入[mixin],就像接口解耦,站在 Java 的角度讲是有局限性的,比如如果 B 实现了接口 inter01,而这个接口里面有 OK 方法,那么当 B 实现了这个接口后,C 也是可以实现 OK 方法的,这是因为传递机制。相当于强制让C多了一个方法,但是如果作为安全性来讲,只想让 B 实现方法而 C 不可以实现 OK 方法的话,这点 JAVA 是做不到的,而 Scala 解决了这个问题。那就是动态混入,如果使用动态混入机制的话,B 使用 trait 中的规范,而 C 不会受到任何影响,这就是 Scala 的好处。