(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! の意味は inherit、 val、 method と同じですが、それにより導入される定義がオーバライドであることを要求します。すなわち、 method! はmethod-name がクラス内で既に定義されていることを要求し、 val! は inst-var-name が既に定義されていることを要求し、 inherit! は class-expr で何らかの定義をオーバーライドすることを要求します。そのようなオーバーライドがなければエラーが通知されます。
これらの予約語は、副作用として、「メソッドのオーバーライド」と「インスタンス変数のオーバーライド」に対する警告を避けるために使うことができます。 Objective Caml 3.12 以降では後方互換性のために「メソッドのオーバーライド」に関する警告を手動で有効にしなければなりません。