面向对象的实质是抽象。
一个对象对应的是一份数据,与此同时,对象还绑定了一系列操作此数据的方法(函数)。
c++中通过封装、继承、多态来完成这一过程。
rust通过impl和trait这两个语法设计来完成这一过程。
注意:rust没有直接继承字段的语法设计,因为rust更看重组合胜于继承。
impl
将函数绑定数据类型上。这里的绑定是逻辑上。
impl通常有如下两种方法。
impl name {
}
impl trait_name for name {
}
其中,name表示的是复合数据类型的名称,trait_name为trait 名称,当然还有泛型的特殊写法,这个后面再介绍。
在第一个中实现的函数会绑定到类名的作用域中,其中为数据类型的值实现的方法要带上self这个参数,这个参数指向调用过程中的值,没有这个参数的函数会被声明为静态函数,通过::调用。
注意:self指代的是数据类型的值,它可能拥有所有权的值、共享引用、可变引用。Self指代的实现的类型。
第二种impl中实现的方法必须在trait中声明,它实现的函数个数是有限的。
trait
共性还是特质。
相对于其他类型来说,trait是特质。
对有着一定共同特性的类型来说,trait是共性。
trait是一种划分类型的方式。
如何理解trait
trait实例如下:
trait分为:
- 名称
- 关联类型
- 函数声明与实现
其中关联类型是可选的。