7.17 クラス定義中でのオーバーライドの明示

(OCaml 3.12 〜)

class-field ::= ...
| inherit! class-expr [ as value-name ]
| val! [ mutable ] inst-var-name [ : typexpr ] = expr
| method! [ private ] method-name { parameter } [ typexpr ] = expr
| method! [ private ] method-name : poly-typexpr = expr

inherit!val!method! の意味は inheritvalmethod と同じですが、それにより導入される定義がオーバライドであることを要求します。すなわち、 method!method-name がクラス内で既に定義されていることを要求し、 val!inst-var-name が既に定義されていることを要求し、 inherit!class-expr で何らかの定義をオーバーライドすることを要求します。そのようなオーバーライドがなければエラーが通知されます。

これらの予約語は、副作用として、「メソッドのオーバーライド」と「インスタンス変数のオーバーライド」に対する警告を避けるために使うことができます。 Objective Caml 3.12 以降では後方互換性のために「メソッドのオーバーライド」に関する警告を手動で有効にしなければなりません。