当前位置: 首页 > news >正文

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

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

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

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

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

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

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(特征)+ 动态分发

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 的组合使用,从而达到组合优于继承的设计理念。

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 结构”的现代语言。它提倡组合优于继承,接口多态代替继承多态。

相关文章:

  • system V消息队列和信号量的学习
  • Python番外——常用的包功能讲解和分类组合
  • 服务治理-搭建Nacos注册中心
  • @EnableAsync+@Async源码学习笔记之六
  • 【自动化测试框架】什么是对象层?
  • [密码学基础]密码学常用名词深度解析:从基础概念到实战应用
  • npm 常用操作和配置
  • 国产GPU生态现状评估:从寒武纪到壁仞的编程适配挑战
  • DeepSeek与Napkin:信息可视化领域的创新利器
  • 安徽合肥京东自营代运营如何突围?
  • CSRF 请求伪造Referer 同源置空配合 XSSToken 值校验复用删除
  • 第3章 垃圾收集器与内存分配策略《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
  • FPGA练习———DDS波形发生器
  • Linux419 三次握手四次挥手抓包 wireshark
  • Dubbo(65)如何实现Dubbo的服务文档生成?
  • ThingsBoard3.9.1 MQTT Topic(3)
  • Python实现对目标Word文档进行自动化排版【4万字精讲】(14)
  • 玩转Docker | 使用Docker部署tududi任务管理工具
  • 【深度学习—李宏毅教程笔记】Transformer
  • verilog float mult
  • 俄乌就不打击民用基础设施释放对话信号
  • 平均25岁,天津茱莉亚管弦乐团进京上演青春版《春之祭》
  • 美国税局代理局长卷入马斯克与美财长之争,还未工作就被迫离职
  • 明查|美军“杜鲁门”号航空母舰遭胡塞武装打击已退役?
  • 用户称被冒用身份证异地办卡申请注销遭拒,澎湃介入后邯郸联通着手办理剥离
  • 为护航企业“出海”,“无问西东·中外商会”海上沙龙举行