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

相关推荐
花褪残红青杏小2 小时前
Rust图像处理第8节-暗角 & 复古胶片特效:四周衰减中心高亮
rust·webassembly·图形学
独孤留白18 小时前
从C到Rust:Rust 的 Trait 不是Interface,那是什么?
rust
花褪残红青杏小1 天前
Rust图像处理第7节-马赛克像素化:分块取平均色实现打码风格
rust·webassembly·图形学
doiito2 天前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
doiito2 天前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小2 天前
Rust图像处理第6节- 均值模糊 & 中值模糊:3×3 邻域的两种经典玩法
rust·webassembly·图形学
子兮曰2 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
星栈2 天前
写 Dioxus Demo 不难,难的是把它写成项目
前端·rust·前端框架
mCell3 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron
武子康3 天前
调查研究-201 Rust 里的 dev build 和 release build:为什么同一份代码性能差这么多?
后端·架构·rust