登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  软件教程

Rust 面向对象

时间:2026-08-20 22:19:31 226浏览 收藏

面向对象的编程语言通常实现了数据的封装与继承并能基于数据调用方法。

Rust 面向对象

Rust 不是面向对象的编程语言,但这些功能都得以实现。

封装

封装就是对外显示的策略,在 Rust 中可以通过模块的机制来实现最外层的封装,并且每一个 Rust 文件都可以看作一个模块,模块内的元素可以通过 pub 关键字对外明示。这一点在"组织管理"章节详细叙述过。

"类"往往是面向对象的编程语言中常用到的概念。"类"封装的是数据,是对同一类数据实体以及其处理方法的抽象。在 Rust 中,我们可以使用结构体或枚举类来实现类的功能:

实例

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();
}

输出结果:

from public method
from private method

继承

几乎其他的面向对象的编程语言都可以实现"继承",并用"extend"词语来描述这个动作。

继承本质上是多态(Polymorphism)思想的一种落地方式。所谓多态,说白了,就是同一套代码能够面向多种类型的数据工作。在 Rust 里,这件事主要通过特性(trait)来完成,关于特性的具体细节,前面的"特性"章节已经讲过了。不过也要注意,特性并不能继承属性,它更接近"接口"这一类能力;因此,如果想把一个类的方法“继承”下来,更合适的做法,通常是在"子类"中定义一个"父类"的实例。

总结地说,Rust 没有提供跟继承有关的语法糖,也没有官方的继承手段(完全等同于 Ja va 中的类的继承),但灵活的语法依然可以实现相关的功能。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>