热门问题
时间线
聊天
视角

協定 (物件導向程式設計)

面向对象编程中的结构类型 来自维基百科,自由的百科全书

Remove ads

物件導向程式設計中,協定(英語:protocol)或介面(英語:interface)類型[a],是充作抽象資料類型。它描述了一組方法簽章,它們的實現可以由相互之間不必然關聯的多個來提供[1]。實現了一個介面中列舉出的方法的類,被稱為實現了這個介面[1],或採納了這個協定[2]

如果對象被完全封裝,則介面是其它對象可以訪問它的唯一方式。例如,在Java中,Comparable介面規定了其實現類必須實現的一個方法compareTo()。這意味著比如說排序方法,可以排序實現了Comparable介面的任何對象的搜集,除了兩個這種對象可以通過compareTo()的方式進行比較之外,不需要知曉這個類的任何內情。

例子

一些程式語言對介面提供了顯式的語言支援:AdaC#D, DartDelphiGoJavaLogtalk英語LogtalkObject PascalObjective-COCamlPHPRacketSeed7英語Seed7SwiftPython(版本3.8以上[3])。在支援多重繼承的語言中,比如C++,介面可以實現為抽象基礎類別

下面是Java中介面的一個例子:

class Animal { ... }
class Theropod extends Animal { ... }

interface Flyable {
    void fly();
}

interface Vocal {
    void vocalize();
}

public class Bird extends Theropod implements Flyable, Vocal {
    // ...
    public void fly() { ... }
    public void vocalize() { ... }
}

在沒有顯式支援的語言中,介面經常以叫做鴨子型別的約定形式出現。例如,在Python中,實現了__iter__方法的任何類都可以用作搜集[4]

類型類,它出現在語言如Haskell之中,或MLOCaml的模組簽章之中,有著類似於介面的用途。

Rust中,介面被稱為特質(英語:trait[5]。在Rust中,struct沒有方法,但卻可以實現trait所聲明的讓struct來實現的方法:

trait Pet {
    fn speak(&self);
}

struct Dog<'a> {
    name: &'a str
}

impl<'a> Dog<'a> {
    fn new(name: &'a str) -> Self {
        Dog { name }
    }
}

impl Pet<'a> for Dog<'a> {
    fn speak(&self) {
        println!("{} says 'Woof!'", self.name);
    }
}
Remove ads

參見

注釋

參照

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads