面向对象的实质是抽象。
一个对象对应的是一份数据,与此同时,对象还绑定了一系列操作此数据的方法(函数)。
c++中通过封装、继承、多态来完成这一过程。
rust通过impl和trait这两个语法设计来完成这一过程。
注意:rust没有直接继承字段的语法设计,因为rust更看重组合胜于继承。

impl

将函数绑定数据类型上。这里的绑定是逻辑上。
impl通常有如下两种方法。

  1. impl name {
  2. }
  1. impl trait_name for name {
  2. }

其中,name表示的是复合数据类型的名称,trait_name为trait 名称,当然还有泛型的特殊写法,这个后面再介绍。
在第一个中实现的函数会绑定到类名的作用域中,其中为数据类型的值实现的方法要带上self这个参数,这个参数指向调用过程中的值,没有这个参数的函数会被声明为静态函数,通过::调用。
注意:self指代的是数据类型的值,它可能拥有所有权的值、共享引用、可变引用。Self指代的实现的类型。
第二种impl中实现的方法必须在trait中声明,它实现的函数个数是有限的。

trait

共性还是特质。
相对于其他类型来说,trait是特质。
对有着一定共同特性的类型来说,trait是共性。
trait是一种划分类型的方式。

如何理解trait

trait实例如下:
trait分为:

  • 名称
  • 关联类型
  • 函数声明与实现

其中关联类型是可选的。