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

相关推荐
运维开发笔记19 分钟前
5.Rust 向量(Vec)入门指南
rust
ACP广源盛1392462567325 分钟前
Type-C 扩展坞方案选型笔记:DP1.4 转 HDMI2.0 桥接方案评估@ACP
笔记·硬件架构·hdmi·国产芯片·扩展坞
Canmag 兴隆磁性1 小时前
中大型钕铁硼产品的磁通测量与自动分选:一条产线自动化的工程实现思路
运维·学习·自动化·永磁材料
ss2733 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群
数据库·笔记·postgresql
ss2733 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 21 PostgreSQL进程与内存架构介绍
数据库·笔记·postgresql
小黄人软件3 小时前
桌面需要整理吗?有工具自动分类
学习
老衲不用@飘柔4 小时前
SFP与SFP+学习知识整理
学习
X54先生(人文科技)4 小时前
社会嵌入式终身学习机器与修复时代-ELR架构和技术演化探讨
人工智能·深度学习·学习·架构·开源协议
传奇开心果编程4 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
电子云与长程纠缠5 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5