学习笔记十七——Rust 支持面向对象编程吗?

🧠 Rust 支持面向对象编程吗?

Rust 是一门多范式语言 ,主要以 安全、并发、函数式、系统级编程 为核心目标,但它同时也支持面向对象的一些关键特性,比如:

特性 传统 OOP(如 Java/C++) Rust 中是否支持 Rust 中的实现方式
封装 private/public 属性封装 ✅ 支持 通过 pub 修饰符控制模块可见性
继承 类可以继承父类 ❌ 不支持 Rust 不支持类继承
多态 虚函数 + 子类重写 ✅ 支持 通过 Trait(特征)实现接口多态
抽象 抽象类、接口 ✅ 支持 使用 Trait 定义行为约定
方法调用 对象.方法() ✅ 支持 结构体实现方法(impl)支持调用
动态分发 虚表 vtable ✅ 支持 Box<dyn Trait> 实现运行时多态
构造器 构造函数 ✅ 支持 new 方法模拟构造函数

🚀 举例说明:Rust 是如何支持面向对象的?

✅ 1. 封装:结构体 + 模块可见性控制

rust 复制代码
mod user {
    pub struct User {
        pub name: String,    // 公开字段
        age: u32,            // 私有字段
    }

    impl User {
        pub fn new(name: String, age: u32) -> Self {
            Self { name, age }
        }

        pub fn age(&self) -> u32 {
            self.age
        }
    }
}

fn main() {
    let u = user::User::new("Tom".to_string(), 30);
    println!("名字: {}", u.name);
    println!("年龄: {}", u.age()); // 注意:不能直接访问私有字段 age
}

通俗解释 :Rust 没有 class,但通过 struct + impl 的组合,我们依然能做到封装数据 + 提供接口。


✅ 2. 多态:Trait(特征)+ 动态分发

rust 复制代码
trait Animal {
    fn speak(&self);
}

struct Dog;
struct Cat;

impl Animal for Dog {
    fn speak(&self) {
        println!("汪汪!");
    }
}

impl Animal for Cat {
    fn speak(&self) {
        println!("喵喵!");
    }
}

fn make_sound(animal: &dyn Animal) {
    animal.speak();
}

fn main() {
    let dog = Dog;
    let cat = Cat;
    make_sound(&dog);  // 汪汪!
    make_sound(&cat);  // 喵喵!
}

通俗解释 :Rust 用 trait 取代了传统语言中的"接口"和"虚函数",&dyn Trait 表示运行时多态(类似 Java 中的多态调用)。


❌ 3. 不支持类继承,但支持 Trait 组合

Rust 明确放弃了"类继承"机制,防止复杂的继承体系导致维护困难。但它支持Trait 的组合使用,从而达到组合优于继承的设计理念。

rust 复制代码
trait Fly {
    fn fly(&self);
}

trait Swim {
    fn swim(&self);
}

struct Duck;

impl Fly for Duck {
    fn fly(&self) {
        println!("鸭子飞!");
    }
}

impl Swim for Duck {
    fn swim(&self) {
        println!("鸭子游!");
    }
}

Duck 同时实现了多个 trait,相当于同时"拥有"飞行和游泳能力,用组合替代继承。


🧩 总结:Rust 是面向对象的吗?

项目 Rust 的情况
支持封装 ✅ 有模块系统和可见性控制
支持抽象 ✅ 有 trait 类似接口
支持多态 ✅ 静态和动态多态都支持
支持继承 ❌ 明确不支持类继承
语法是否类 OOP ❌ 没有 class,语法更像函数式语言

所以可以这样说:

Rust 是一门"支持面向对象编程思想,但不强调传统 OOP 结构"的现代语言。它提倡组合优于继承,接口多态代替继承多态。

相关推荐
JeffDingAI9 分钟前
【Datawhale学习笔记】RLHF微调技术及实践
人工智能·笔记·学习
Yupureki15 分钟前
《算法竞赛从入门到国奖》算法基础:搜索-记忆化搜索
c语言·c++·学习·算法·深度优先
Chunyyyen32 分钟前
【第三十二周】RAG学习02
学习
强子感冒了41 分钟前
MySQL学习随笔:数据类型与字段约束
学习·mysql
三块可乐两块冰41 分钟前
【第二十七周】机器学习笔记二十八
笔记·机器学习
tritone1 小时前
学习Chef自动化配置管理工具,为了实践环境部署,我选择了**阿贝云**的**免费虚拟主机**和**免费云服务器**来搭建测试平台。
服务器·学习·自动化
xian_wwq1 小时前
【学习笔记】特权账号管理(PAM)
笔记·学习·pam
星火开发设计1 小时前
const 指针与指针 const:分清常量指针与指针常量
开发语言·c++·学习·算法·指针·const·知识
驱动探索者1 小时前
AMD EPYC 服务器 CPU 学习
运维·服务器·学习·cpu
丝斯20111 小时前
AI学习笔记整理(57)——大模型微调相关技术
人工智能·笔记·学习