Rust 面向?qū)ο?/h1>

面向?qū)ο蟮木幊陶Z(yǔ)言通常實(shí)現(xiàn)了數(shù)據(jù)的封裝與繼承并能基于數(shù)據(jù)調(diào)用方法。

Rust 不是面向?qū)ο蟮木幊陶Z(yǔ)言,但這些功能都得以實(shí)現(xiàn)。

封裝

封裝就是對(duì)外顯示的策略,在 Rust 中可以通過(guò)模塊的機(jī)制來(lái)實(shí)現(xiàn)最外層的封裝,并且每一個(gè) Rust 文件都可以看作一個(gè)模塊,模塊內(nèi)的元素可以通過(guò) pub 關(guān)鍵字對(duì)外明示。這一點(diǎn)在"組織管理"章節(jié)詳細(xì)敘述過(guò)。

"類(lèi)"往往是面向?qū)ο蟮木幊陶Z(yǔ)言中常用到的概念。"類(lèi)"封裝的是數(shù)據(jù),是對(duì)同一類(lèi)數(shù)據(jù)實(shí)體以及其處理方法的抽象。在 Rust 中,我們可以使用結(jié)構(gòu)體或枚舉類(lèi)來(lái)實(shí)現(xiàn)類(lèi)的功能:

pub struct ClassName {
    pub field: Type,
}

pub impl ClassName {
    fn some_method(&self) {
        // 方法函數(shù)體
    }
}

pub enum EnumName {
    A,
    B,
}

pub impl EnumName {
    fn some_method(&self) {

    } 
}

下面建造一個(gè)完整的類(lèi):

second.rs
pub struct ClassName {
    field: i32,
}

impl ClassName {
    pub fn new(value: i32) -> ClassName {
        ClassName {
            field: value
        }
    }

    pub fn public_method(&self) {
        println!("from public method");
        self.private_method();
    }

    fn private_method(&self) {
        println!("from private method");
    }
}
main.rs
mod second;
use second::ClassName;

fn main() {
    let object = ClassName::new(1024);
    object.public_method();
}

輸出結(jié)果:

from public method
from private method

繼承

幾乎其他的面向?qū)ο蟮木幊陶Z(yǔ)言都可以實(shí)現(xiàn)"繼承",并用"extend"詞語(yǔ)來(lái)描述這個(gè)動(dòng)作。

繼承是多態(tài)(Polymorphism)思想的實(shí)現(xiàn),多態(tài)指的是編程語(yǔ)言可以處理多種類(lèi)型數(shù)據(jù)的代碼。在 Rust 中,通過(guò)特性(trait)實(shí)現(xiàn)多態(tài)。有關(guān)特性的細(xì)節(jié)已在"特性"章節(jié)給出。但是特性無(wú)法實(shí)現(xiàn)屬性的繼承,只能實(shí)現(xiàn)類(lèi)似于"接口"的功能,所以想繼承一個(gè)類(lèi)的方法最好在"子類(lèi)"中定義"父類(lèi)"的示例。

總結(jié)地說(shuō),Rust 沒(méi)有提供跟繼承有關(guān)的語(yǔ)法糖,也沒(méi)有官方的繼承手段(完全等同于 Java 中的類(lèi)的繼承),但靈活的語(yǔ)法依然可以實(shí)現(xiàn)相關(guān)的功能。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清