文章目录
- 0、引入
- 1、封装
- 2、继承
- 3、多态
- 4、引用
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不是面向对象语言,在多态实现功能只能说完成了接口的定义。
–