学习笔记十七——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 结构"的现代语言。它提倡组合优于继承,接口多态代替继承多态。

相关推荐
天水幼麟25 分钟前
动手学深度学习-学习笔记【二】(基础知识)
笔记·深度学习·学习
绿皮的猪猪侠42 分钟前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
沧海一笑-dj1 小时前
【51单片机】51单片机学习笔记-课程简介
笔记·学习·51单片机·江科大·江科大学习笔记·江科大单片机·江科大51单片机
老虎06271 小时前
JavaWeb(苍穹外卖)--学习笔记04(前端:HTML,CSS,JavaScript)
前端·javascript·css·笔记·学习·html
大苏打seven2 小时前
Docker学习笔记:Docker网络
笔记·学习·docker
KENYCHEN奉孝3 小时前
Rust征服字节跳动:高并发服务器实战
服务器·开发语言·rust
Green1Leaves4 小时前
pytorch学习-9.多分类问题
人工智能·pytorch·学习
慕y2744 小时前
Java学习第十五部分——MyBatis
java·学习·mybatis
碣石潇湘无限路5 小时前
【AI篇】当Transformer模型开始学习《孙子兵法》
人工智能·学习
kikikidult6 小时前
(2025.07)解决——ubuntu20.04系统开机黑屏,左上角光标闪烁
笔记·ubuntu