virtual
というキーワードを用いることで、メソッドを宣言だけして定義しないですますことができます。このようなメソッドのことを抽象メソッドと呼びます。抽象メソッドの定義は後に子クラスで与えることができます。抽象メソッドを含むクラスを抽象クラスと呼びます。抽象クラスを定義する際には、クラス定義にも virtual
キーワードが必要です。また、抽象クラスのインスタンス、つまりこのクラスのオブジェクトを生成することはできません。一方、抽象クラスの定義は、通常のクラスと同じく型名を定義します。抽象クラスに対応する型では抽象メソッドは、通常のメソッドと同じように扱われます。
#
class virtual abstract_point x_init = object (self) method virtual get_x : int method get_offset = self get_x - x_init method virtual move : int -> unit end;;
class virtual abstract_point : int -> object method get_offset : int method virtual get_x : int method virtual move : int -> unit end
#
class point x_init = object inherit abstract_point x_init val mutable x = x_init method get_x = x method move d = x <- x + d end;;
class point : int -> object val mutable x : int method get_offset : int method get_x : int method move : int -> unit end
インスタンス変数も virtual
と宣言することで、メソッドの場合と同じ効果が得られます。
#
class virtual abstract_point2 = object val mutable virtual x : int method move d = x <- x + d end;;
class virtual abstract_point2 : object val mutable virtual x : int method move : int -> unit end
#
class point2 x_init = object inherit abstract_point2 val mutable x = x_init method get_offset = x - x_init end;;
class point2 : int -> object val mutable x : int method get_offset : int method move : int -> unit end