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

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