在这里插入图片描述

0、引入

Rust 不是面向对象的编程语言,但是可以实现面向对象方法:封装与继承,以及不完全的多态


1、封装

  • "类"往往是面向对象的编程语言中常用到的概念。"类"封装的是数据,是对同一类数据实体以及其处理方法的抽象。在 Rust语法中,我们介绍了结构体和枚举,其实在C语言中也是同样可以用结构体实现类的概念。
  • 封装就是对外显示的策略,在 Rust 中可以通过模块的机制来实现最外层的封装,并且每一个 Rust文件都可以看作一个模块,模块内的元素可以通过 pub 关键字对外显示。这一点在"组织管理"章节详细叙述过。
    见如下代码(用结构体或者枚举来实现)
//结构体
pub struct ClassName {
    pub field: Type,
}

pub impl ClassName {
    fn some_method(&self) {
        // 方法函数体
    }
}
//或者枚举
pub enum EnumName {
    A,
    B,
}

pub impl EnumName {
    fn some_method(&self) {

    }
}

演示一个完整的代码示例

//这是一个文件 second.rs

pub struct ClassName {
    field: i32,
}

impl ClassName {
    pub fn new(value: i32) -> ClassName {
        ClassName {
            field: value
        }
    }

    pub fn public_method(&self) {
        println!("from public method");
        self.private_method();
    }

    fn private_method(&self) {
        println!("from private method");
    }
}
//这是一个文件 main.rs
mod second;
use second::ClassName;

fn main() {
    let object = ClassName::new(1024);
    object.public_method();
}

2、继承

几乎其他的面向对象的编程语言都可以实现"继承",**并用"extend"词语来描述这个动作。**继承是多态(Polymorphism)思想的实现,多态指的是编程语言可以处理多种类型数据的代码。
总结地说,Rust 没有提供跟继承有关的语法糖,也没有官方的继承手段(完全等同于 Java 中的类的继承),但灵活的语法依然可以实现相关的功能。


3、多态

在 Rust 中,通过特性(trait)实现多态。有关特性的细节已在"特性"章节给出。但是特性无法实现属性的继承,只能实现类似于"接口"的功能,所以想继承一个类的方法最好在"子类"中定义"父类"的实例。


4、引用

Rust可以实现面向对象的概念,只是在真正使用过程中只是借鉴了该想法,毕竟Rust不是面向对象语言,在多态实现功能只能说完成了接口的定义。

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐