2017-09-19 40 views
3

比方說,我有以下abstractProductA類的公共方法稱爲methodAOOP - 如何理性創建一個接口

class abstractProductA = { 
    pub methodA => "name"; 
}; 

我想創建一個界面,上面寫着功能methodA應該總是返回string 。類似的東西

interface abstractProductA { 
    abstractProductA(): string 
} 

只有在理由,然後有類實現它。任何建議都是值得歡迎的。謝謝

回答

1

你真正要求的似乎是如何定義和使用抽象類,被稱爲OCaml中/原因虛擬類:

class virtual virtualProductA = { 
    pub virtual methodA: string; 
}; 

class abstractProductA = { 
    inherit virtualProductA; 
    pub methodA = "name"; 
}; 

的界面更加爲消費者抽象出一個實現,而虛擬類本身可以用作接口,因爲OCaml/Reason對象是結構化類型的,所以你也可以指定你需要的對象類型。當然,如果你喜歡,你可以將它綁定到一個名稱:

type interfaceA = {. 
    methodA : string 
}; 

let f (p: interfaceA) => Js.log p#methodA; 
f (new abstractProductA); 
+0

我想知道是否可以用兩種方法擴展「結構類型」答案。一,詳細說明「結構類型」是什麼意思。其次,插入代碼以瞭解它如何與abstractProductA類一起使用。謝謝。 –

+0

在這種情況下,結構分類僅僅意味着您不必事先定義關係。您不必明確指定'abstractProductA'實現'interfaceA',它通過簡單地實現相同的「結構」即隱含地實現。具有相同名稱和類型的方法。 – glennsl

+0

不錯。所以我想,最好的做法是在這種情況下使用結構類型而不是抽象類,對吧? –