學習筆記十七——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 結構”的現代語言。它提倡組合優于繼承,接口多態代替繼承多態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79655.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux】43.網絡基礎(2.5)

文章目錄 2.4 TCP/UDP對比2.4.1 用UDP實現可靠傳輸(經典面試題) 2.5 TCP 相關實驗2.5.1 理解 listen 的第二個參數 2.4 TCP/UDP對比 我們說了TCP是可靠連接, 那么是不是TCP一定就優于UDP呢? TCP和UDP之間的優點和缺點, 不能簡單, 絕對的進行比較TCP用于可靠傳輸的情況, 應用于…

three.js與webgl在buffer上的對應關系

一、three.js的類名 最近開始接觸three.js 看到three.js中的一些類名和webgl的很相似 不自覺的就想對比一下 二、three.js中繪制4個點 // 創建點的幾何體 const vertices new Float32Array([0.0, 0.0, 0.0, // 點11.0, 0.0, 0.0, // 點20.0, 1.0, 0.0, // 點30.…

DataWhale AI春訓營 問題匯總

1.沒用下載訓練集導致出錯&#xff0c;爆錯如下。 這個時候需要去比賽官網下載對應的初賽訓練集 unzip -d /mnt/workspace/sais_third_new_energy_baseline/data /mnt/workspace/sais_third_new_energy_baseline/初賽訓練集.zip 在命令行執行這個命令解壓 2.沒定義測試集 te…

CANFD技術在新能源汽車通信網絡中的應用與可靠性分析

一、引言 新能源汽車產業正處于快速發展階段&#xff0c;其電子系統復雜度不斷攀升&#xff0c;涵蓋眾多傳感器、控制器與執行器。高效通信網絡成為確保新能源汽車安全運行與智能功能實現的核心要素。傳統CAN總線因帶寬限制&#xff0c;難以滿足高級駕駛輔助系統&#xff08;A…

Python字典深度解析:高效鍵值對數據管理指南

一、字典核心概念解析 1. 字典定義與特征 字典&#xff08;Dictionary&#xff09;是Python中??基于哈希表實現??的無序可變容器&#xff0c;通過鍵值對存儲數據&#xff0c;具有以下核心特性&#xff1a; ??鍵值對結構??&#xff1a;{key: value}形式存儲數據??快…

C++中unique_lock和lock_guard區別

目錄 1.自動鎖定與解鎖機制 2.靈活性 3.所有權轉移 4.可與條件變量配合使用 5.性能開銷 在 C 中&#xff0c;std::unique_lock 和 std::lock_guard 都屬于標準庫 <mutex> 中的互斥鎖管理工具&#xff0c;用于簡化互斥鎖的使用并確保線程安全。但它們存在一些顯著區別…

Nvidia顯卡架構演進

1 簡介 顯示卡&#xff08;英語&#xff1a;Display Card&#xff09;簡稱顯卡&#xff0c;也稱圖形卡&#xff08;Graphics Card&#xff09;&#xff0c;是個人電腦上以圖形處理器&#xff08;GPU&#xff09;為核心的擴展卡&#xff0c;用途是提供中央處理器以外的微處理器幫…

下載electron 22.3.27 源碼錯誤集錦

下載步驟同 electron源碼下載及編譯_electron源碼編譯-CSDN博客 問題1 從github 下載 dugite超時&#xff0c;原因沒有找到 Validation failed. Expected 8ea2d0d3c9d9e4615069913207371ffe892dc10fb93975972f2f6e668f2e3b3a but got e3b0c44298fc1c149afbf4c8996fb92427ae41e…

洛谷P1120 小木棍

#算法/進階搜索 思路: 首先,最初始想法,將我們需要枚舉的長木棍個數計算出來,在dfs中,我們先判斷,此時枚舉這根長木棍需要的長度是否為0,如果為0,我們就枚舉下一個根木棍,接著再判斷,此時仍需要枚舉的木棍個數是否為0,如果為0,代表我們這種方案可行,直接打印長木棍長度,接著我們…

Linux教程-常用命令系列二

文章目錄 1. 系統管理常用命令1. useradd - 創建用戶賬戶功能基本用法常用選項示例 2. passwd - 管理用戶密碼功能基本用法常用選項示例 3. kill - 終止進程功能基本用法常用信號示例 4. date - 顯示和設置系統時間功能基本用法常用選項時間格式示例 5. bc - 高精度計算器功能基…

18、TimeDiff論文筆記

TimeDiff **1. 背景與動機****2. 擴散模型基礎****3. TimeDiff 模型****3.1 前向擴散過程****3.2 后向去噪過程** 4、TimeDiff&#xff08;架構&#xff09;原理訓練推理其他關鍵點解釋 DDPM&#xff08;相關數學&#xff09;1、正態分布2、條件概率1. **與多個條件相關**&…

整合SSM——(SpringMVC+Spring+Mybatis)

目錄 SSM整合 創建項目 導入依賴 配置文件 SpringConfig MyBatisConfig JdbcConfig ServletConfig SpringMvcConfig 功能模塊 測試 業務層接口測試 控制層測試 SSM是Java Web開發中常用的三個主流框架組合的縮寫&#xff0c;分別對應Spring、Spring MVC、MyBatis…

P1042【深基8,例1】乒乓球

【題目背景】國際乒聯現在主席沙拉拉自從上任以來就立志于推行一系列改革&#xff0c;以推動乒乓球運動在全球的普及。其中 11 分制改革引起了很大的爭議&#xff0c;有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位&#xff0c;他退役之后走上了乒乓球研究工作…

ubuntu24.04上使用qemu和buildroot模擬vexpress-ca9開發板構建嵌入式arm linux環境

1 準備工作 1.1 安裝qemu 在ubuntu系統中使用以下命令安裝qemu。 sudo apt install qemu-system-arm 安裝完畢后&#xff0c;在終端輸入: qemu- 后按TAB鍵&#xff0c;彈出下列命令證明安裝成功。 1.2 安裝arm交叉編譯工具鏈 sudo apt install gcc-arm-linux-gnueabihf 安裝之…

用 R 語言打造交互式敘事地圖:講述黃河源區生態變化的故事

目錄 ?? 項目背景:黃河源頭的生態變遷 ?? 技術棧介紹 ??? 最終效果預覽 ?? 項目構建步驟 1?? 數據準備 2?? 構建 Leaflet 地圖 3?? 使用 scrollama 實現滾動觸發事件 4?? 使用 R Markdown / Quarto 打包發布 ?? 效果展示截圖 ?? 完整代碼倉庫 …

CTF--秋名山車神

一、原網頁&#xff1a; 二、步驟&#xff1a; 1.嘗試用計算器計算&#xff1a; 計算器溢出&#xff0c;無法正常計算 2.使用python計算&#xff1a; 得出計算結果為&#xff1a;1864710043732437134701060769 3.多次刷新頁面&#xff1a; 發現變量為value&#xff0c;要用pos…

CRC實戰寶典:從原理到代碼,全面攻克循環冗余校驗

CRC實戰寶典&#xff1a;從原理到代碼&#xff0c;全面攻克循環冗余校驗 github開源&#xff1a;CRC軟硬件協同測試項目 CRC 簡介 CRC&#xff08;循環冗余校驗&#xff09;是一種強大的錯誤檢測技術&#xff0c;廣泛應用于數字網絡和存儲系統。它是確保數據完整性的重要方法…

【大模型】DeepSeek + Coze 打造個人專屬AI智能體使用詳解

目錄 一、前言 二、AI智能體介紹 2.1 什么是AI智能體 2.2 AI智能體核心能力 2.3 AI智能應用場景 三、coze 介紹 3.1 coze是什么 3.1.1 平臺概述 3.1.2 平臺適用人群 3.2 平臺核心功能 3.3 coze可以做什么 3.4 為什么選擇coze 四、coze 搭建AI智能體操作實踐 4.1 搭…

MySQL入門:數據表的創建

?今天我們來介紹一下除HTML外的另一種語言&#xff1a;MySQL語言&#xff1b; MySQL&#xff1a;即一種用于管理和處理關系數據庫的標準語言。要用于執行查詢、更新、管理數據庫中的數據以及定義和操作數據庫結構。 接下來我會逐一介紹它的作用以及其中數據表&#xff0c;數據…

[圖論]生成樹 引言

生成樹 引言 生成樹&#xff1a;一個連通圖的生成樹是該圖的一個極小連通子圖。生成樹中含有圖中全部(設 V V V個)頂點及構成一棵樹的 V ? 1 V-1 V?1條邊&#xff0c;且生成樹中不應有環。最小生成樹(MST)&#xff1a;圖的所有生成樹中&#xff0c;邊權之和最小的生成樹。顯…