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

相关推荐
QT 小鲜肉14 分钟前
【C++基础与提高】第一章:走进C++的世界——从零开始的编程之旅
开发语言·c++·笔记·qt
老虎062714 分钟前
黑马点评学习笔记10(优惠券秒杀下单优化(分布式锁的优化,Lua脚本))
笔记·分布式·学习
递归不收敛41 分钟前
config.json 完全指南:项目配置的核心实践
笔记·学习·json
shenghaide_jiahu1 小时前
字符串匹配和回文串类题目
学习·算法·动态规划
一个平凡而乐于分享的小比特1 小时前
UCOS-III笔记(一)
笔记·ucosiii
驯狼小羊羔1 小时前
学习随笔-http和https有何区别
前端·javascript·学习·http·https
风无雨1 小时前
gin学习
学习·gin
lkbhua莱克瓦242 小时前
Java入门——Java跨平台的原理
java·开发语言·笔记·github
皓木.2 小时前
软件测试-app测试
笔记
招风的黑耳2 小时前
Axure可视化大屏原型模板库:学习设计/提高效率/快速可视化
学习·axure·数据可视化·大屏设计